[英]Sharing data between controllers in Angular, to watch or not watch?
我閱讀了以下問題和解答: 在AngularJS控制器之間共享數據,在 更改服務數據時更新范圍值 ,以及Angular:在控制器之間更新服務並共享數據 。
我的問題是關於提供的答案。 答案通常暗示$watch
,但我不明白為什么。
我想在控制器之間共享一些值,所以我簡單地做到了這一點(這是代碼的簡化):
angular.module('app', [])
.factory('SomeSharedData', function()
{
return { 'pointer' : { 'someKey' : 'someValue' }};
})
.controller('Controller1', ['$scope', 'SomeSharedData', function($scope, SomeSharedData) {
$scope.pointer = SomeSharedData.pointer;
}])
.controller('Controller2', ['$scope', 'SomeSharedData', function($scope, SomeSharedData)
{
$scope.pointer = SomeSharedData.pointer;
}]);
這是出於某種原因而繼承的邪惡嗎?
為什么要使用類似:
$scope.$watch(function () { return SomeSharedData.someKey(); }, function (newValue) {
if (newValue) $scope.someKey = newValue;
});
實際上取決於您的情況,控制器中的指針變量將設置為SomeSharedData工廠指針變量。 因此,在您的情況下無需使用$ watch,因為變量將被設置一次。
但是,如果控制器中的指針變量發生更改,您想做些什么,該怎么辦? 您將不知道,如果不使用$ watch(這就是$ watch的目的),則指針變量是否已更改。
像,舉個例子。 在這里,我創建了一個稱為指針的模型,我正在監視更改,如果發生任何更改,則每次計數都會增加1。 在這種情況下,需要$ watch。 因此,如果在任何情況下您都想更改模型,則可以使用$ watch。
的index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Angular $watch</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js"></script>
</head>
<body>
<div ng-app="myApp">
<div ng-controller="myCtrl">
<input type="text" ng-model="pointer">
{{pointer}}
<br>
<h3>Will increase if input changes:<h1>{{count}}</h1></h3>
</div>
</div>
<script src="main.js"></script>
</body>
</html>
main.js
var myApp = angular.module('myApp', []);
myApp.controller('myCtrl', ['$scope', function ($scope) {
$scope.count = 1;
$scope.$watch('pointer', function(newValue, oldValue) {
if ( newValue !== oldValue ) {
$scope.count += 1;
}
});
}]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.