如何在启动角度应用程序之前等待Meteor订阅

时间:2016-08-11 19:05:10

标签: angularjs meteor

  • 我正在使用 angular-meteor pascalprecht.translate
  • 翻译对象必须存储在数据库中,以便某些用户可以通过后台修改翻译
  • 我订阅了包含翻译的集合,并将它们加载到.config()
  • 效果很好但是在加载应用程序时,页面会在订阅准备好之前呈现。在短时间内文本不会被翻译。
  • 我必须做一些事情,以便我们在开始时总能看到翻译

我的问题如下: 是否有可能在订阅启动之前等待订阅准备就绪?

祝你好运

bboisvert

angular.module('test').config(['$translateProvider', function ($translateProvider) {

    Meteor.subscribe('settings', function(){
        test = Settings.findOne({name: "translations"});
        $translateProvider.translations('fr-FR', test['fr-FR']);
        $translateProvider.translations('en-EN', test['en-EN']);
    });

}]);

1 个答案:

答案 0 :(得分:0)

Meteor.subscribe回调中,您可以执行$rootScope.$broadcast('meteorSubscribed')

在你的根级指令/控制器上

监听它并设置一个$scope变量来说明它已加载。然后,您可以将该变量用于ng-ifng-show

示例:

$scope.$on('meteorSubscribed', function(){
    $scope.meteorReady = true;
});
模板中的

<div ng-app="test" ng-controller="RootController" ng-show="meteorReady">
    <!-- your app here -->
</div>

您还可以绕过整个事件+控制器设置,只需在$rootScope.meteorReady = true;回调中设置Meteor.subscribe即可。真的取决于你的应用程序的设置。