2015-11-24 61 views
0

我試圖按照此示例進行操作,但當輸入由於某些原因而更改時,我的代碼從未輸入回調,並且newValue。我的例子和下面的示例bin唯一的區別是我使用服務來保存值而不是控制器變量。當使用控制器作爲語法時,觀察服務對象的更改不起作用

我一直在努力使它工作,但我無法用頭包住它。我錯過了什麼?

http://jsbin.com/yinadoce/1/edit?html,js,output

請注意,我已經排除了輸入和前值的步驟在服務更新,因爲這完美的作品。問題只是我的手錶不明白服務中的值何時發生變化。

編輯:當我粘貼代碼時,忘記了在控制器中注入$scope,現在它已完成。

控制器:

coForms.controller('CoFormsCtrl', ['$scope', 'coFormsInfo', function($scope, coFormsInfo) { 

    $scope.$watch(angular.bind(coFormsInfo.getInfo(), function() { 
    return coFormsInfo.getInfo(); 
    }), function(newVal) { 
    console.log(newVal); 
    }); 
}]); 

服務:

coForms.service('coFormsInfo', [function() { 

    var info = { 
     filteredList: [] 
    } 

    this.setFilteredList = function(list) { 
     info.filteredList = list; 
    }; 

    this.getInfo = function() { 
     return info; 
    }; 
}]); 

回答

1

的守望者是否有檢測你正在觀看的變量的任何更改。他如何看待那些不是......嚴格呈現爲回報價值?

我不確定我在說什麼,因爲我是新來的角,但邏輯似乎在那裏是錯誤的。你需要觀察一些聲明來檢測一些變化的東西。

您應該打電話給您的服務,以便在需要時獲取您的信息並觀察info變量。

編輯

我的壞有類似的東西,但你應該聲明它的功能也許像文檔上的例子

var food; 
scope.foodCounter = 0; 
expect(scope.foodCounter).toEqual(0); 
scope.$watch(
    // This function returns the value being watched. It is called for each turn of the $digest loop 
    function() { return food; }, 
    // This is the change listener, called when the value returned from the above function changes 
    function(newValue, oldValue) { 
    if (newValue !== oldValue) { 
     // Only increment the counter if the value changed 
     scope.foodCounter = scope.foodCounter + 1; 
    } 
    } 
); 
相關問題