如何在angularjs中观察服务中定义的变量

时间:2014-02-01 11:52:57

标签: angularjs

我正在尝试观察angularj服务中定义的json数组的更改,但是当发生更改时,$ watch函数不会触发。我的控制器和服务代码如下(plunker demo):

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope,cityService) {
  //$scope.cities = [];
  $scope.service = cityService;
  cityService.initCities();


  $scope.$watch('service.getCity()', function(newVal) {
    $scope.cities = newVal;
    console.log(newVal)
  });


});

app.service('cityService', function($http) {
  this.cities = [];

  this.initCities = function() {
      $http.get('data.js').success(function(data) {
          this.cities = data;
      });
  };

  this.getCity = function() {
      return this.cities;
  };
});

2 个答案:

答案 0 :(得分:2)

这是因为从get set thiswindow对象的回调。在self

中保留服务的引用

看到这个plunker http://plnkr.co/edit/CrgTWRBsg5wi7WOSZiRS?p=preview

答案 1 :(得分:1)

我改变了几件事来使其发挥作用: http://plnkr.co/edit/PDMaEvmx7hG1fKvAmR7R?p=preview

  • 功能监视而不是变量
  • 在服务中,删除了关键字this,因为它在函数内部的上下文不同。
  • 返回服务中的功能

似乎没问题