2013-04-19 5 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) 
}); 

그리고 내보기 : 나는 또한 plunkr에 예를 만들었습니다

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

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

http://plnkr.co/edit/BUPS6U0S7ktDEkH9dZTZ?p=preview

답변

5

는보기의 HTML에 나타납니다 때문에 "리스너"컨트롤러가 처음 시작 얻을 때문에 그 이유는 먼저. 주문을 전환하면 '첫 번째'메시지가 표시됩니다.

: 객체를 참조하고이 같은 객체의 속성을 렌더링하기 위해 더 강력한 이유

한가지 더, 당신은 문자열에 대한 참조를 설정하고 나중에 문자열을 변경 할 때, 당신은 참조를 잃고, 그건 컨트롤러 :

$scope.Message = Message 

보기 :

{{Message.message}} 

당신은 참조를 잃지 말고 그런 식으로