【问题标题】:Access to a collection from resolve从解析访问集合
【发布时间】:2016-09-30 18:39:01
【问题描述】:

如何验证流星账户模块的用户集合中的特定字段?

假设下一个代码:

$stateProvider.state('myState', {
  resolve:{
    function($q) {
      if(Meteor.userId()){
        return $q.resolve();
      }

      else {
        retrun $q.reject();
      }
    }
  }
})

在解析内部可以使用 Meteor.userId() 函数从用户那里检索 _id,但我不能以相同的方式使用 Meteor.user() 函数。如何从解析中检索该集合中的自定义数据

【问题讨论】:

  • 为什么不能以同样的方式使用Meteor.user()?这个函数不是返回整个user 对象吗?
  • 是的,它应该,或者至少我猜它应该但是......它没有,也许与 Angular 加载数据的执行顺序有关。

标签: angularjs meteor


【解决方案1】:

这有点棘手,但可以在您的状态下使用此代码解决:

resolve: {
    currentUser: ($q) => {
        var deferred = $q.defer();

        Meteor.autorun(function () {
            if (!Meteor.loggingIn()) {
                if (Meteor.user() == null) {
                    deferred.reject('AUTH_REQUIRED');
                } else {
                    deferred.resolve(Meteor.user());
                }
            }
        });

        return deferred.promise;
    }
}

这将确保在加载 Meteor.user() 记录之前不会解析路由,如果未登录,则拒绝路由。我花了一段时间才找到这个,但现在它是一个守门员:)

【讨论】:

  • 感谢您的回答,我尝试在我的代码中实现它,但它不能解决视图,您可以检查一下这个要点,看看我是否做错了什么? gist.github.com/2JN/31bbe6589c450b1df5eadc025d4da06e
  • 你应该使用 usuario() 而不是 usuario:
  • 谢谢你 Mikkel 你太棒了!我做错了什么,但是您在哪里解决了我的问题,我在哪里可以阅读有关此解决方案的更多信息?
【解决方案2】:

从要点开始,下面的代码就是我的助手的样子

this.helpers({
    member: () => Members.findOne({mid: Meteor.userId()}),
    currentUser: () => {
        return Meteor.user();
    },

【讨论】:

  • 是否可以在类外访问助手?
  • 另外,我意识到我做错了,看来resolve里面的函数一定是箭头函数:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多