当我更新变量$ scope.userMovies中的数据时,如果在ng-view中,ng-repeat不会更新。在ng-view之外,它可以正确更新。
我错过了什么,ng-repeat不能像我期望的那样工作?
更新 根据要求,我将代码移动到Plunker以更好地解决我的问题: Plunker Code Example
更新 解决了在rootScope中保存变量userMovies的问题。
答案 0 :(得分:2)
ng-view创建了自己的范围。可能发生的是您在此ng-view子范围上创建$ scope属性userMovies
,MovieboxCtrl范围无法查看/访问该范围。正如@darkporter在评论中提到的,您的MovieboxCtrl应该创建一个空的userMovies
数组。然后,当MovieCtrl设置userMovies
时,它将更新现有的对象引用,而不是创建新属性。
Here is a 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
数组。我们想要修改那个数组,而不是分配一个新数组。