2013-04-19 3 views
0

Почему в 1, 2, 3 случаях изменение сообщения в службе не влияет на перемещенное сообщение?AngularJs прослушивание изменений в сервисе

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

ответ

5

Причина заключается в том, потому что «Слушатель» контроллер получить инициировал первый, так как она наПредставление в HTML первый. Если вы переключите заказ, вы увидите сообщение «Первое». более

Одно дело, когда вы установите ссылку на строку, а затем изменить строку, вы теряете ссылку, поэтому он более мощный, чтобы обратиться к объекту, а затем вынести свойство объекта, как это:

контроллер:

$scope.Message = Message 

Вид:

{{Message.message}} 

Таким образом, вы не потеряете ссылки

Смежные вопросы