【问题标题】:Angularjs watchGroup() not working with Service changesAngularjs watchGroup() 不适用于服务更改
【发布时间】:2016-02-27 13:43:20
【问题描述】:

当其他控制器对其进行一些更改时,我无法查看服务中的多个变量。 我有以下内容:

angular.module('carApp').controller('CarListCtrl', function ($scope, CarService) {
    $scope.carList = CarService.carList
    $scope.initalAmount = CarService.initialAmount
    $scope.startDate = CarService.startDate

    $scope.$watchGroup(['carList', 'initialAmount', 'startDate'],
        function (newValues, oldValues, $scope) {
            console.log(newValues);
        });
});

其他控制器一直在更新 Service 中的值,但 watchGroup 永远不会启动...

我创建了一个直接针对服务的简单手表,以检查它是否工作,并且它正在工作......所以我认为 watchGroup 应该直接针对服务变量,但我找不到如何做到这一点.. ..

这是一个可以工作的简单手表:

$scope.$watch(function () {
    return CarService.carList
}, function (newVal, oldVal) {
     console.log(newVal);
});

我应该怎么做才能使它与多个服务变量一起工作?

更新 1:

更新... ,但是一旦我再添加一个元素,它就会停止工作......非常烦人......

再次感谢各位!

【问题讨论】:

    标签: angularjs watch


    【解决方案1】:

    为了结束这个,来自 angularjs github 的人帮助我:这里是任何需要的人的答案:

    watchGroup 数组中的每个值都可以是表达式或函数,因此您可以在 watchGroup 中使用三个不同的函数。 http://plnkr.co/edit/nMmPt808xAFXqjJ6yEoc?p=preview

    $scope.$watchGroup([
        function() {
          return myService.valueOne()
        },
        function() {
          return myService.valueTwo()
        }    
      ], function(newValues, oldValues) {
        $scope.valueOne = newValues[0]
        $scope.valueTwo = newValues[1]
      })
    

    您的第一个示例可能不起作用,因为您的其他控制器为您的服务中的 initialAmount 和 startDate 分配了新值,这意味着您的控制器和 startDate 中有具有不同值的不同对象。它可能适用于 carList,因为您只是添加/删除项目,这意味着它在您的控制器和服务中保持相同的对象。

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 2019-11-01
      • 2019-09-04
      • 2015-03-23
      • 2017-10-27
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多