$ watch不使用数据模型工厂

时间:2014-03-19 19:55:51

标签: javascript angularjs

我正在构建一个相当大的应用程序,并且想确保我做对了。

第一只手表按预期为空。

但当http呼叫完成时,观察不会再次发射。

但是,自从使用ng-repeat工作以来,来自http电话的品牌都在范围内。

我宁愿不使用$ broadcast,因为我觉得它过度使我的一些使用$ watch的指令变得复杂。

Heres a plunker:http://plnkr.co/edit/L1SNV7mt6x7XCF4QFDPk?p=preview

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

app.controller('main', function($scope, $http, Brand) {

  $scope.brands = Brand.all;

  $scope.$watch('brands', function(old, neww) {
    console.log('brands', old, neww);
  });

});

app.factory('Brand', function($http) {

  var brands = {
    all: [],
    add: function(item) {
      brands.all.push(item);
    },
    get: function() {
      brands.all = [];
      $http.get('json.txt').success(function(data) {
        _.each(data, function(brand){
          brands.add(Model(brand));
        });
      });
    }
  };

  var Model = function(item) {
    return item;
  };

  brands.get();

  return brands;
});

2 个答案:

答案 0 :(得分:4)

尝试将$watch中的3d参数设置为true

$scope.$watch('brands', function(old, neww) {
   console.log('brands', old, neww);
}, true);  

它会说角度更深。 Docs

答案 1 :(得分:0)

这与AngularJS如何检测其监视的项目的更改有关。只需观看是否在数组中添加或删除元素,您就会想要使用$watchCollection而不是$watch

Updated plunk