Angular JS:在ng-view中没有更新ng-repeat

时间:2013-04-24 15:52:47

标签: angularjs angularjs-ng-repeat

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

我错过了什么,ng-repeat不能像我期望的那样工作?

更新 根据要求,我将代码移动到Plunker以更好地解决我的问题: Plunker Code Example

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

1 个答案:

答案 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数组。我们想要修改那个数组,而不是分配一个新数组。