我的 AngularJS 视图能够访问它的控制器范围,但 ng-repeat 不起作用

My AngularJS view is able to access it's controller's scope, but ng-repeat doesn't work

我正在构建一个 MEAN 应用程序并使用 yeoman 搭建客户端代码。我有一个控制器和名为电影的视图。

这是电影控制器:

'use strict';

/**                                                                                                                                                                                  
 * @ngdoc function                                                                                                                                                                   
 * @name clientApp.controller:MoviesCtrl                                                                                                                                             
 * @description                                                                                                                                                                      
 * # MoviesCtrl                                                                                                                                                                      
 * Controller of the clientApp                                                                                                                                                       
 */
angular.module('clientApp')
  .controller('MoviesCtrl', function () {
      this.movies = [
          {
              title: 'A New Hope',
              url: 'http://youtube.com/embed/1g3_CFmnU7k'
          },
          {
              title: 'The Empire Strikes Back',
              url: 'http://youtube.com/embed/96v4XraJEPI'
          },
          {
              title: 'Return of the Jedi',
              url: 'http://youtube.com/embed/5UfA_aKBGMc'
          }
      ];

  });

这是电影视图:

<table class="table table-striped">
  <thead>
    <th>Title</th>
    <th>URL</th>
  </thead>
  <tbody>
    <tr ng-repeat="movie in movies">
      <td>{{movie.title}}</td>
      <td>{{movie.url}}</td>
    </tr>
  </tbody>
</table>
{{movies}}

当我在浏览器中查看页面时,ng-repeat 不起作用(没有打印出任何内容),但是在视图中明确打印出 {{movies}} 的地方,我看到了电影 json 我在控制器中定义的。所以,我知道视图可以访问控制器的范围。

为什么即使视图可以访问控制器的范围,ng-repeat 也不起作用?

为了使用this.movies,您需要使用控制器AS语法(MovieCtrl as ctrl)。即便如此,如果您不保存控制器对象(例如,vm = this),您可能 运行 会遇到问题

按照你现在的方式,你需要分配给 $scope 而不是这个

ng-repeat 创建了一个新的子作用域,但是你的父作用域没有 movies 对象,所以你必须将 $scope 注入控制器并指定它通常是如何完成的(例如 $scope.movies = ...)。

对于这种情况,当你想使用 "this" 关键字时,你只需要在你的标记中使用 "MoviesCtrl as moviesCtrl" 然后使用 "moviesCtrl.movies" 在你的 ng- 中获取对象重复。

{{movie}} 之所以有效,很可能是因为插值的工作方式。