0

当我更新变量 $scope.userMovies 中的数据时,如果在 ng-view 中,ng-repeat 不会更新。在 ng-view 之外,它会正确更新。

我错过了什么 ng-repeat 不能按我的预期工作?

更新: 根据要求,我将代码移至 Plunker 以更好地理解我的问题: Plunker 代码示例

更新: 解决了将变量 userMovies 保存在 rootScope 中的问题。

4

1 回答 1

2

ng-view创建自己的范围。可能发生的情况是您正在userMovies此 ng-view 子范围上创建 $scope 属性,您的 MovieboxCtrl 范围无法看到/访问。正如@darkporter 在评论中提到的那样,您的 MovieboxCtrl 应该创建一个空userMovies数组。然后当 MovieCtrl 设置时userMovies,它会更新现有的对象引用,而不是创建一个新属性。


这是一个将数据存储在服务而不是控制器中的 plunker 。

angular.module('moviebox.services', [])
  .factory('movieboxApi', function() {
    var model = { movies: [] };
    model.getMoviesByTitle = function(query) {
      angular.copy([{'title': 'foo'},{'title': 'foo1'},
      {'title': 'foo2'},{'title': 'foo3'},
      {'title': 'foo4'}], model.movies);
    };
    return model;
  });
app.controller('MainCtrl', function($scope, movieboxApi) {
    $scope.getMoviesByTitle = function() {
      movieboxApi.getMoviesByTitle($scope.query);
    };
    $scope.userMovies = movieboxApi.movies;
});
app.controller('MovieboxCtrl', function ($scope, movieboxApi) {
    $scope.userMovies = movieboxApi.movies;
});

HTML 更改:

<body ng-controller="MainCtrl">

angular.copy()之所以使用,是因为控制器具有model.movies对服务最初创建的数组的引用。我们要修改该数组,而不是分配一个新数组。

于 2013-04-24T19:15:51.333 回答