2015-11-24 98 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; 
    } 
    } 
); 
相关问题