編輯:如問,我會更有效地解釋一下!查看更新無處不在,但在當前控制器 - angularJS
最近我一直坐在一個惱人的問題面前,這就是說,無論何時我更新指令中的值,控制器我目前不是「in」是唯一需要更新的控制器。
場景示例:配置文件頁面由兩個控制器組成。目前正在顯示用戶名的Navbar_controller:
<div ng-if="Auth.isAuthenticated">Hello, {{Auth.getCurrentUser().name}}</div>
第二個控制器Profile_controller在這裏更新用戶值。這是在角第一控制器,這將更新CurrentUser一個簡單的函數:
$scope.updateUser = function (type, form) {
if (!$scope.modif)
return ;
$http.put('/api/users/' + Auth.getCurrentUser()._id + '/update', {type:type, modif:$scope.modif})
.success(function (data, status) {
$scope.user = Auth.setNewUser(data);
})
.error(function() {
console.log("error");
});
};
當我更新,例如,名稱。我可以看到數據庫已被正確修改。事實上,navbar_controller得到了更新,因爲在div中打印了一個新名稱。但是,Profile_controller沒有得到更新:在配置文件頁面中打印的名稱沒有更改。
下面是兩種基本功能在Auth.service.js:
getCurrentUser: function() {
return currentUser;
},
// 'user' is the data retrieved in http put request dot success
setNewUser: function(user) {
currentUser = user;
$rootScope.$broadcast(); // Navbar_controller is updated with or without this line
return currentUser;
}
無論如何,如果我看導航欄及其控制器,其被調用Auth.getCurrentUser()的方法,該用戶的值是立即修改。我一直在使用一種醜陋的方法,包括手動修改控制器值或刷新頁面......但這不是要走的路,對吧?
必須有一些東西用「$ rootScope。$ broadcast();」,但我真的是新來的Angular和其他問題在stackoverflow是太具體,以幫助我理解正確。
謝謝!
能否詳細說明一下,實際問題是什麼?當前用戶是否正在上下文中調用您的方法? – 2014-09-10 13:28:53
是你的刷新問題? – V31 2014-09-10 13:36:44
嘗試擴展對象,而不是用新的替換它 – charlietfl 2014-09-10 13:55:35