Yeoman 生成 angularjs ng-repeat 未显示来自控制器的数据

Yeoman generated angularjs ng-repeat not showing data from controller

我第一次涉足 MEAN 世界。我使用 yo angular 生成了一个自举的 angular 应用程序。接下来我将自动生成的默认内容 about.html 替换为

<div ng-controller="AboutCtrl">
  <ul>
    <li ng-repeat="thing in awesomeThings">
      {{ thing }}
    </li>
  </ul>
</div>

除了 about.js 控制器外还有一个:

'use strict';

/**
 * @ngdoc function
 * @name clientApp.controller:AboutCtrl
 * @description
 * # AboutCtrl
 * Controller of the clientApp
 */
angular.module('clientApp')
  .controller('AboutCtrl', function () {
    this.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];
  });

index.html 文件中的相关内容是:

<body ng-app="clientApp">
.
.
.
<div class="container">
<div ng-view=""></div>
</div>

正如我所说,我对整个应用程序所做的唯一更改是更改 about.html 文件的内容。

然后我使用 grunt serve 到 运行 在浏览器中打开应用程序的程序。当我访问关于页面时,什么也没有,空白。我已经阅读了一些关于 angular 的内容,但到目前为止,我所阅读的内容都没有给我任何关于我可能做错了什么的想法。

yo angular 正在做它的事情时,我注意到一个红色的文本抱怨 package.json 已经存在,后来这个过程似乎挂起,直到我按下 Enter,然后它继续覆盖 package.json 文件并继续到最后,注释为一切都已完成且没有错误。

我当然会感谢您的帮助。

this

angular.module('clientApp')
  .controller('AboutCtrl', function () {
    this.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];
  });

表示您必须使用 controllerAs 语法:

<div ng-controller="AboutCtrl as about">
  <ul>
    <li ng-repeat="thing in about.awesomeThings">
      {{ thing }}
    </li>
  </ul>
</div>

视图看起来正确,但在您的控制器中,我会将 "this" 更改为“$scope”:

angular.module('clientApp')
 .controller('AboutCtrl', function ($scope) {
      $scope.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
 ];
});

我相信 estus 关于控制器的语法是正确的。这里有一些关于它和你的选择的更多信息。

this 暗示您正在使用控制器作为语法。这是 angular 控制器的指南,其中包含两种语法 https://docs.angularjs.org/guide/controller. here is another helpful breakdown http://toddmotto.com/digging-into-angulars-controller-as-syntax/.

的示例

如果您不想使用控制器作为语法,您应该将 awesomeThings 声明为控制器范围的 属性。您需要注入范围变量才能以这种方式使用它。这是它的样子。

angular.module('clientApp')
.controller('AboutCtrl', ['$scope', function($scope) {
  $scope.awesomeThings = [
     'HTML5 Boilerplate',
     'AngularJS',
     'Karma'
  ];
}]);