2014-01-23 59 views
3

AngularJS Classic:Im更改我的模型ng-click視圖沒有更新。我認爲簡單的$scope.$apply()會更新,但我沒有得到它的工作。我想我不是在正確的地方設置$apply()或類似的東西。AngularJS - 模型更改沒有更新視圖

實施例:Plunker

對象的名稱上按鍵來改變。

回答

3

點擊後,只需更新explorerObject一個更多的時間,因爲它仍然是以前的對象指向:

$scope.click = function() { 
    ExplorerService.setExplorerObject({ 
     selected : { 
     name: 'Defined Now !', 
     id: 'id', 
     timestamp: 'timestamp' 
     }, 
     templateURL: 'views/beispiel.html' 
    }); 
    $scope.explorerObject = ExplorerService.getExplorerObject(); // <--- here 
    } 

工作:http://plnkr.co/edit/UWE7o3mtAzY3xzYRWfkf?p=preview

問題後」編輯:

你可以在您的第二個控制器中使用$watch

app.controller('SecondCtrl', function($scope, ExplorerService) { 

    $scope.$watch(function(){ 
     return ExplorerService.getExplorerObject(); 
    },function(n,o){ 
     $scope.explorerObject = ExplorerService.getExplorerObject(); 
    },true) 

}); 

工作:http://plnkr.co/edit/8mZO5kZmTrqwHKnxtBSd?p=preview

或者使用$broadcast的方法,如:

app.controller('SecondCtrl', function($scope, ExplorerService) { 

    $scope.explorerObject = ExplorerService.getExplorerObject(); 

    $scope.$on("EXPLORER_OBJECT_CHANGED" ,function(event,obj){ 
     $scope.explorerObject = obj; 
    });  

}); 

而在你的服務添加:$rootScope.$broadcast("EXPLORER_OBJECT_CHANGED", explorerObject);

例子:http://plnkr.co/edit/9WKypJTb0wViQZ01m9TN?p=preview

+0

我很抱歉,我的榜樣並不完全代表我的問題。我現在更新了它。謝謝您的回答。 [Plunker](http://plnkr.co/edit/8rREFdLKvznaNLlaj6Hm) – strangfeld

+0

@strangfeld好吧,看看我的更新 – Cherniv

+0

哪種方法更高性能/更便宜? – strangfeld