【问题标题】:Undefined Meteor.user() after refresh Angular2 Meteor刷新Angular2 Meteor后未定义的Meteor.user()
【发布时间】:2017-08-24 06:36:45
【问题描述】:

我对 Angular2 和 Meteor 还是很陌生。 我想做一件非常简单的事情:使用 Meteor.user() 从 Meteor 获取当前用户信息。 问题是,每当我刷新页面时,Meteor.user() 的配置文件值就会变为“未定义”。

我做了一些搜索,显然 Meteor.user() 太长而无法执行。 显然,您可以使用 Tracker.autorun() 等待 Meteor.user() 初始化。

目前我的代码如下所示:

Tracker.autorun(function () {
        Meteor.subscribe("userLoggedIn");
        console.log(Meteor.user());
        if(Meteor.user() !== undefined) {
           //Do something
           this.myFunction();
        }
     });

问题是“myFunction”是“未定义”,因为它没有在 Tracker 中定义(至少我认为)。

你知道如何调用我的函数吗? 在跟踪器中执行那么多代码可以吗? 是否可以在 Tracker 之外等待 Meteor.user() 的初始化?

(是的,我有很多问题:p)

提前谢谢你! :)

【问题讨论】:

    标签: javascript node.js angular meteor meteor-accounts


    【解决方案1】:

    如果您依赖this,为什么不使用箭头函数来保留上下文?

    Tracker.autorun(() => { this.myFunction(); });
    

    你也可以设置一个作用域变量,老派的方式:

    var self = this;
    
    Tracker.autorun(function () { /* bla bla */ self.myFunction(); });
    

    【讨论】:

    • 工作就像一个魅力谢谢!除了一个奇怪的点。如果我刷新我的页面,从我的组件发送的值不会显示,直到我单击我的视图的组成部分(如 textearea)。你知道是什么原因造成的吗?知道我的 Tracker 函数在“ngOnInit”中。
    • 您使用的是哪种浏览器?
    • 好吧,我找到了答案!我需要添加 zone.run() !谢谢你的帮助@ghybs :)
    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多