当我更新变量 $scope.userMovies 中的数据时,如果在 ng-view 中,ng-repeat 不会更新。在 ng-view 之外,它会正确更新。
我错过了什么 ng-repeat 不能按我的预期工作?
更新: 根据要求,我将代码移至 Plunker 以更好地理解我的问题: Plunker 代码示例
更新: 解决了将变量 userMovies 保存在 rootScope 中的问题。
当我更新变量 $scope.userMovies 中的数据时,如果在 ng-view 中,ng-repeat 不会更新。在 ng-view 之外,它会正确更新。
我错过了什么 ng-repeat 不能按我的预期工作?
更新: 根据要求,我将代码移至 Plunker 以更好地理解我的问题: Plunker 代码示例
更新: 解决了将变量 userMovies 保存在 rootScope 中的问题。
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
对服务最初创建的数组的引用。我们要修改该数组,而不是分配一个新数组。