[英]AngularJS controller not updated by factory
我有兩個控制器和一個工廠。 第一個控制器向服務器發出一個http請求,並取回一個字符串,該字符串將其寫入工廠。 然后,應該使用新字符串更新第二個控制器,但不會發生。
相關代碼:
...
.factory('user', function() {
return {
name: {str: ''},
passwordHashed: {str: ''},
userType: {str: 'none'},
};
})
.controller('nav', ['$scope', 'user', function($scope, user) {
$scope.allSites = [
//example what a page looks like, i have several more pages and several more usertypes
{name: 'home', title: 'Home', allowed: ['none', 'admin']},
];
$scope.allowedSites = []; //displayed in navigation
angular.forEach($scope.allSites, function(site) {
if(contains(site.allowed, user.userType.str) != -1) $scope.allowedSites.push(site);
});
}])
.controller('loginCTRL', ['$scope', '$http', 'user', function($scope, $http, user) {
$http.get('url').success(function(data) {
//some code
user.name.str = $scope.enteredUsername;
user.passwordHashed.str = $scope.passwordHashed;
user.userType.str = data; //admin
});
});
每次userType更改時,這應該重新生成導航,但是例如在登錄后,什么也沒有發生。 我到處搜索,有些帖子說,您應該將字符串放入單獨的對象中,但這並不能解決任何問題。 我仍然保留了它(所有這些{str: 'bla'}
東西)。
如果您在此服務的代碼(順便說一下,不是工廠)中設置了一些斷點,則您將看到控制器的初始化發生得太早了,這意味着您還沒有針對該服務的正確狀態。
這是因為依賴項注入機制。
您的控制器僅初始化一次狀態。 如果要更新其狀態,則必須將相關代碼放入refresh()函數中,並以某種方式在准備好服務的地方調用它。
有幾種方法可以做到這一點,例如,您可以在這里看看: http : //www.codeproject.com/Tips/773147/Communication-between-the-Controllers-in-AngularJS
查看您的代碼,這里有一些應如何做的建議:
$routeProvider
與“ acl”之類的自定義屬性一起使用。 使用數字值。 采用:
app.run(function ($rootScope, $location) { $rootScope.$on('$routeChangeStart', function (event, nextRoute, currRoute) {
創建重定向攔截器。
ACL屬性的數值比較: if (user.acl < route.acl)
干凈簡單:)
BTW。 您可以在控制器中使用$ watch來觀察工廠中的變化並對它們做出反應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.