等待Meteor.user()在模板渲染之前完全加载

时间:2017-02-24 11:37:32

标签: meteor meteor-blaze

之前有人问过,我觉得我没有看到合适的答案。我目前在布局模板上使用{{ #if currentUser.emails.[0].verified }} show data {{else}} please verify email {{/if}}检查用户是否已验证其电子邮件。在这种情况下,如果用户已注册,我会在屏幕之间出现闪烁,因为meteor.user()未完全加载,因此currentUser.emails.[0].verified返回null并在完全加载后更改为true。

有没有办法可以在模板渲染之前等待Meteor.userId完全加载而不使用延迟?

3 个答案:

答案 0 :(得分:2)

meteor嵌入式“currentUser”助手可以在用户收集准备就绪时通知您:

{{#if currentUser}} // Do my stuff {{else}} Checking... // You can also show a spinner image or GIF here
{{/if}}

答案 1 :(得分:0)

通常,您可以在模板中使用Template.subscriptionsReady来包装依赖于订阅数据的代码。由于Meteor自动处理currentUser的发布/订阅,我不确定这种方法是否有效。试一试,让我知道。

实施例

{{#if Template.subscriptionsReady}}
  {{ #if currentUser.emails.[0].verified }} show data {{else}} please verify email {{/if}}
{{/if}}

答案 2 :(得分:0)

我发现对我来说效果很好的是在铁路由器的waitOn函数中等待用户等待:

Router.route('/',{
        waitOn: [
            function() { 
                if (!Meteor.userId()) {
                  Router.go("/login");
                }
                return Meteor.subscribe('currUser');
            },

        ],
        ...
})