2016-10-13 69 views
0

我很努力在angularjs中使用服務方法在控制器之間共享數據。從這裏的某處stackoverflow我得到這個工作代碼(對不起,我想念原始來源),我extendet它。angularjs在控制器之間共享數據(服務方法) - 觀察者沒有叫

jsbin sourcecode

(updatet版本:http://jsbin.com/hadegec/5/edit?html,js,output

所有工作正常,與原始源,將項目添加到購物車,總價在CartCtrl更新。

我試圖用一個非常簡單的消息來擴展它。但是,當物品觀察者工作得很好時,觀察者看到我的新消息卡不工作。我真的無法看到項目更新和我的新消息測試之間的區別。它必須是觀察者,因爲如果我將$scope.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 差不多...... messageT(或者在updatet版本中messageCart)設置在this.addToOrder = function(item){method!每當我給購物車添加一個物品時,該消息應該顯示當前時間 – kaepten

+0

您不會更改'addToOrder'中的'messageCart'。只需設置一次:'$ scope.messageCart = Order.getmessage();'。然後它不會改變,'Order.messageOrder'和'$ cope.messageCart'之間沒有神奇的聯繫 – zeroflagL

回答

0

解決的辦法是:

  • 沒有觀看(unchagend)的範圍

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

  • 消息字符串屬性,但看一個函數返回的服務屬性

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

我不明白的最後一件事是數組屬性'items'和字符串propery'message'之間的區別。我不明白,爲什麼'$ scope.itemsCart'對'Order.items'的引用被檢測爲已更改,而'$ scope.ordernewmessage'是這樣設置的; '$ scope.ordernewmessage = Order.getOrderMessage()'沒有改變...

+0

_「我不明白,爲什麼在檢測到‘$ scope.itemsCart’參考‘Order.items’爲改變而‘$ scope.ordernewmessage’設置這樣的」 _諷刺的是這句話解釋了爲什麼。一個是參考,另一個不是。如果我給你一本書,並且新版本發佈,那麼我給你的書不會改變。如果你想要新版本,你需要一本新書。但是,如果我給你一個網頁的鏈接,那麼當你訪問該頁面時,你總能看到最新版本。 '$ scope.ordernewmessage'是一個String,一個原始的不可變值。 '$ scope.itemsCart'是一個引用,與鏈接不同。 – zeroflagL

相關問題