如何在解决app.run的承诺之前阻止我的控制器加载?

时间:2016-12-14 15:58:43

标签: angularjs

如果无法做到这一点,我愿意接受任何解决方案。

我有一个alerts工厂,其中包含一个数组,其中填充了app.run上API调用的提醒。

我还有一个units控制器,它将$scope.unit_alerts变量设置为与该特定单元页面关联的警报。问题是,大约10%的时间,单元控制器尝试在alerts工厂加载API调用之前设置范围变量,从而导致未定义的错误。

我知道在解决承诺之前使用UI路由器阻止页面加载,但在这种情况下,我需要在整个应用程序中提供警报,无论unit页面是否为第一个加载页面。因此,我不能将依赖项放在单元路由中,因为它不适用于应用程序的其余部分。

angular.module('app').run(['alerts,function(alerts){
  // some code to get user and units  
  alerts.populate(user._id, units)
}];

angular.module('app').factory('alerts, function($http){
var o = {};
o.alerts = [];

o.populate = function(user_id, units){
 return $http.get('/api/users/alerts/' + user_id).then(function(res){
   res.data.forEach(function(alert){
        o.alerts.push(alert);
   });
  });
});

return o;
});

angular.module('app').config(['stateProvider', function($stateProvider){
$stateProvider.state('units', {
  url: '/units/{id}',
  templateUrl: '../unit.html',
  reloadOnSearch: false,
  controller: 'UnitsCtrl',
  resolve: {
    unit: ['$stateParams', 'units',
      function ($stateParams, units) {
        return units.get($stateParams.id);
      }
    ]
  }
});

});


angular.module('app').controller('UnitsCtrl', ['alerts', function(alerts){

 $scope.unit_alerts = alerts.alerts

});

0 个答案:

没有答案