我想在页面加载之前检查一些条件,所以我使用了resolve属性 如
when('/home', { templateUrl: 'views/home.html', controller: 'homeController',resolve: {
user: function () {
if (localStorage.getItem('FBUserData') === null) {
$location.url('/login');
}
}()
}}).
但这不起作用,因为它显示的错误如下:
错误:[ng:areq]参数' fn'不是一个功能,未定义 ' 所以我将函数移动到控制器并尝试从那里调用,但这给出了不同的错误:
修改后的代码
var angAuth = angular.module('angularAuthApp'[...]);
angAuth.config(function ($routeProvider, $locationProvider) {
$routeProvider.
when('/home', { templateUrl: 'views/home.html', controller: 'homeController',resolve:homeController.checkUserFBSession})
....
....
});
在homeController中:
angAuth.controller('homeController', function ($scope, $location) {
$scope.checkUserFBSession = function(){
if(localStorage.getItem('FBUserData') === null){
$location.url('/login');
}
};
...
});
在添加 resolve:homeController.checkUserFBSession 之后,我收到的错误如
由于以下原因无法实例化angularAuthApp模块:未定义homeController
答案 0 :(得分:0)
原因是resolve
的值是“应该注入控制器的可选依赖关系映射。如果这些依赖关系中的任何一个是promise,路由器将等待它们全部成为在实例化控制器之前解决或拒绝一个。“
这意味着{/ 1}}需要在实例化控制器之前进行评估。因此,您无法使用控制器中定义的函数来评估user
。
你的第一种方法应该工作思考(如果正确实施)。
user
是键值映射,其中resolve
是注入控制器的依赖项的名称,key
是字符串(表示)服务的名称)或功能。该函数由Angular调用,但在您的情况下,您自己调用它并返回undefined,因此Angular看到未定义的函数或字符串。
你应该改变这个:
value
到那个:
user: function () {...}()
注意:为了使用user: function ($location) {...}
,您还需要将其注入函数。
另请参阅此 short demo 。