0

1、2、3 のケースで、サービス中のメッセージを変更しても、表示されるメッセージに影響しないのはなぜですか?

var app = angular.module('app', []); 

app.factory('Message', function() {
  return {message: "why this message doesn't changed"};
});

app.controller('Changer', function($scope, Message) {
  Message.message = "first" // (1)

  $scope.changeItems = function() {
    Message.message = "second" // (2)
  }
});

app.controller('Listener', function($scope, Message) {
  $scope.message = Message.message
  Message.message = "third" // (3)
});

そして私の見解:

<div ng-controller="Listener">
  {{ message }}  
</div>

<div ng-controller="Changer">
  <button ng-click="changeItems()">change message</button>
</div>

plunkr http://plnkr.co/edit/BUPS6U0S7ktDEkH9dZTZ?p=previewの例も作成しました

4

1 に答える 1

5

その理由は、「リスナー」コントローラーが最初にビューの HTML に表示されるため、最初に開始されるためです。順序を入れ替えると、「最初」のメッセージが表示されます。

もう1つ、文字列への参照を設定し、後で文字列を変更すると、参照が失われます。そのため、オブジェクトを参照してから、オブジェクトのプロパティを次のようにレンダリングする方が強力です。

コントローラ:

$scope.Message = Message

意見:

{{Message.message}}

そうすれば、参照を失うことはありません

于 2013-04-19T19:59:57.663 に答える