請問我做了一個頁面,其中header部分是ng include進來的(裡面有logincontroller來判斷是否顯示login按鈕),同時我在ngroute裡面定義了一個登陸頁面,它也用logincontroller,我透過$http拿到資料後回調到scope,但是視圖頁面沒有更新,好像同一個controller有兩個作用域一樣,這是為什麼? (我發現在nginclude完成的時候會執行一次logincontroller裡面的東西,當進入登陸頁面時又會觸發一次)
我還嘗試了網路上說的$apply()結果會回傳正在一個錯誤
function($scope,$http,$location,$timeout,userService,notifyService) {
$scope.login = {
userid:"bbbbb",
}
$scope.user={islogged:0}
$timeout(function(){
//$scope.user={islogged:1}
console.log($scope.user);
},5000)
$scope.httplogin = function(){
$http({
method:'POST',
url:server.domain+server.login,
data:{
userid:$scope.login.userid,
password:$scope.login.password,
},
}).success(function(d){
if(d.code == 200){
$scope.login={userid:1111111}
$scope.user={islogged:1}
notifyService.make('success',d.data.msg,5)
}else{
alert(d.msg)
}
})
}
上面是controller的程式碼,其中在timeout裡面由consolelog,如果打印它會一次出現三個,是不是我在三個地方都用了同一個ngcontroller的原因,如果註釋調timeout中的$scope. user={islogged:1},會印成這樣的,這樣對於我的任務來說就不正常了,我希望他們都是相同的
Object {islogged: 0}
Object {islogged: 0}
Object {islogged: 1}
如果取消$scope.user={islogged:1}註解讓它運作就會正常列印三個controller都是正常的了。
Object {islogged: 1}
Object {islogged: 1}
Object {islogged: 1}
================
剛剛又測試了下,它是只在當前觸發的ngcontroller下修改了數值,如果多個ngcontroller的話其它ngcontroller的數值不會發生變化,不管是在nginclude還是ngview下都是這樣。如何讓同一個ngcontroller修改的資料能同步到另一個地方?
你確定是同一個scope嗎?
ng-include
會建立新的scope的。看了程式碼之後
確實是的每一個controller都是單獨的實例的,互不影響。你可以考慮把資料狀態放到一個全域(更上一層)的scope下;更好的方式應該是透過service統一來管理
例如這樣:
$scope.$apply()不行麼?
最好先確定你在兩個地方看到的
$scope
是同一個 scope,而不是其中一個是另一個的子 scope 什麼的。貼程式碼上來好些~
我也遇到相同的問題,$scope第一次改變的時候,界面上的數據不動,但當界面有了變化(比如說開始淡出時)數據就會立即變化,然後之後$scope再變的時候,介面就跟著變了。
我也試過用$apply,但會報一大長串錯誤,據說好像是什麼已經在使用了,之類的……也不懂……希望能有解答辦法。