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

第一只手表是空的,如预期的那样。

但是当http调用完成时,watch不会再次触发。

但是,由于使用ng-repeat,因此http调用中的品牌属于范围内。

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

继承人: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;
});

最佳答案

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

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


观看更深时会说成角度。
Docs

10-07 21:13