javascript - "Controller as"不适用于 ng-repeat

标签 javascript angularjs angularjs-scope

我试图在“Controller as” block 中填充一个列表,但似乎无法显示任何内容。我得到了一个使用 $scope 的想法的最小示例:

JS:

var app = angular.module('testApp', []);
app.controller('listController', ["$scope", ($scope) => {
  $scope.listFiles = ["hello", "world"];
}]);

HTML:

<div ng-app="testApp" ng-controller="listController">
  <div class="list-group">
    <a class="list-group-item list-group-item-action" ng-repeat="filename in listFiles">{{ filename }}</a>
  </div>
</div>

JSFiddle

但是当我引入“Controller as”时,列表不显示:

JS:

var app = angular.module('testApp', []);

app.controller('listController', ["$scope", ($scope) => {
  var $ctrl = this;
  $ctrl.listFiles = ["hello", "world"];
}]);

HTML:

<div ng-app="testApp" ng-controller="listController as ctrl">
  <div class="list-group">
    <a class="list-group-item list-group-item-action" ng-repeat="filename in ctrl.listFiles">{{ filename }}</a>
  </div>
</div>

JSFiddle

我知道 $scopethis 是不同的概念,但我似乎无法理解这种情况下的具体细节。

这可能是 ng-repeat 范围规则的结果,还是我遗漏了一些明显的东西?

最佳答案

在这里你不应该在定义controller function时使用arrow function,这将导致this到一个不属于 Controller 本身的意想不到的上下文.解决方案是使用普通的 function

引用下面的例子并修复 jsfiddle .

var app = angular.module('testApp', []);

app.controller('listController', ["$scope", function($scope) {
  var $ctrl = this;
  this.listFiles = ["hello", "world"];
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.js"></script>
<div ng-app="testApp" ng-controller="listController as ctrl">
  <div class="list-group">
    <a class="list-group-item list-group-item-action" ng-repeat="filename in ctrl.listFiles">{{ filename }}</a>
  </div>
</div>

关于javascript - "Controller as"不适用于 ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45156320/

相关文章:

jquery - angular.js $http 相当于 jquery 的 ajax 传统参数

javascript - WebAssembly 和 OpenGL - 单一上下文,多个输出(到 Canvas )

angularjs - 如何使用 ES6 注入(inject) Angular 类

javascript - 在嵌套指令场景中从内部指令(模板内部)传递属性

angularjs - 如何在 Angular 的 md-radio-button 上制作 "checked"

angularjs - 在 AngularJS 中从没有隔离作用域的指令调用 Controller 函数

javascript - 在指令的链接函数中修改事件中的范围变量

javascript - &lt;script&gt; 标签不属于同源策略的原因/背景是什么

javascript - 如何在我当前的 NodeJS 编码中使用 Promise Chaining

javascript - 始终在 materializecss 中显示汉堡菜单