簡體   English   中英

在Angular的控制器之間共享數據,觀看還是不觀看?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM