2016-10-13 3 views
0

저는 angularjs에서 서비스 접근 방식으로 컨트롤러간에 데이터를 공유하는 데 어려움을 겪고 있습니다. 여기 어딘가에 stackoverflow에서 내가이 작업 코드 (미안 해요, 나는 원래의 소스를 그리워) 그리고 내가 그것을 extendet 있어요.angularjs 컨트롤러간에 데이터 공유 (서비스 접근) - watcher는 호출되지 않습니다.

jsbin sourcecode

(updatet 버전 : http://jsbin.com/hadegec/5/edit?html,js,output)

모두 장바구니에 항목을 추가하고 총 가격이 CartCtrl에 업데이트됩니다, 원래의 소스와 잘 작동한다.

아주 간단한 메시지로 확장하려고했습니다. 그러나 아이템 워처가 잘 작동하는 동안 내 새로운 messageCart의 워처가 작동하지 않습니다. 항목 업데이트와 새 메시지 테스트의 차이점을 실제로 볼 수 없습니다. 감시자 여야합니다. 왜냐하면 제가 을 item-watcher (console.log("w-Items:"+Order.getmessage()); 안에 넣는다면 항상 올바른 문자열을 얻을 수 있기 때문입니다 ...

어떤 생각이십니까?

+0

'messageT'의 값을 절대 변경하지 않으므로'$ scope. $ watch ('messageT''? – zeroflagL

+0

오, 안돼 .... 또한 jsbin에 testcode와 고군분투. http://jsbin.com/hadegec/5/edit?html,js,output 거의 같은 ... 메시지 T (또는 updatet 버전에서 messageCart)는 this.addToOrder = function (item) {메쏘드에 설정되어 있습니다!] 장바구니에 항목을 추가 할 때마다 메시지에 현재 시간이 표시되어야합니다 .. – kaepten

+0

'addToOrder'에서'messageCart'를 바꾸지 않습니다. '$ scope.messageCart = Order.getmessage();'이후에는 변경되지 않으며,'Order.messageOrder'와'$ cope.messageCart' 사이에는 마법 같은 연결이 없습니다. – zeroflagL

답변

0

솔루션은 다음과 같습니다

  • 범위

$scope.ordernewmessage = Order.getOrderMessage(); $scope.$watch('ordernewmessage ', function() {

  • 의 (unchagend) 메시지 문자열 속성에 볼 수 있지만 기능은 서비스 속성
을 돌아 보지

$scope.$watch(function(){return Order.message;}, function(){

마지막으로 이해할 수없는 것은 배열 속성 'items'과 문자열 propery 'message'사이의 차이입니다. 나는 '$ scope.ordernewmessage'가 이와 같이 설정되는 동안 'Order.items'에 대한 '$ scope.itemsCart'참조가 변경된 것으로 감지되는 이유를 이해하지 못합니다. '$ scope.ordernewmessage = Order.getOrderMessage()'는 변경되지 않습니다 ...

+0

_ "나는 왜 '$ scope.ordernewmessage'가 이와 같이 설정되는 동안 'Order.items'에 대한 '$ scope.itemsCart'참조가 변경된 것으로 감지되는지 이해하지 못합니다."이 문장은 왜 그런지 설명합니다. 하나는 참조이고 다른 하나는 참조입니다. 내가 당신에게 책을주고 새로운 판이 발간된다면, 내가 준 책은 변하지 않습니다. 새 버전이 필요하면 새 책이 필요합니다. 그러나 웹 페이지에 대한 링크를 제공하면 페이지를 방문 할 때 항상 최신 버전이 표시됩니다. '$ scope.ordernewmessage'는 원시적 인 불변 값 인 String입니다. '$ scope.itemsCart'는 링크와 달리 참조입니다. – zeroflagL

관련 문제