【发布时间】:2017-09-24 15:22:01
【问题描述】:
我有一个运行 ng-repeat 的 html 文件,然后该 ng-repeat 中的每个项目都会生成一个模板,该模板也有自己的控制器
在 html 文件中,我有类似的内容:
<div ng-repeat="item in items">
<div ng-include="'template.html" ng-init="getData(item)"></div>
</div>
然后这个模板有它自己的控制器。
控制器有函数getData(item),看起来像这样:
$scope.getData = function(item){
var chapter = item;
}
$scope.myVec = chapter.myVec.length;
template.html 看起来像:
<div ng-controller = "Controller">
<p>{{myVec}}</p>
</div>
然后我在控制台上收到一条错误消息“无法读取未定义的属性'长度'”
我在这里缺少什么?控制器是否在定义var chapter的函数之前运行?
【问题讨论】:
-
而不是将
ng-include和ng-init与内部ng-controller一起使用,您真的应该考虑将此作为指令。ng-init在这里不起作用,因为它绑定到外部控制器,但您需要内部控制器上的数据。 -
是的,我想我现在明白了。在 ng-init 上运行函数只会获取函数范围内的数据,而不是整个控制器
-
我写了一个快速指令,做我认为你想要完成的事情;让我知道它是否有帮助(或没有):plnkr.co/edit/aoLzsSmmszeJiVa7znXY?p=preview
-
是的,我知道你在那里做了什么!谢谢,它有效!我还找到了另一个解决方案。我使用了 $scope.$parent 和父范围内的项目。因为模板的控制器在另一个控制器中,所以解决了这个问题!也感谢您的解决方案!
标签: javascript angularjs angularjs-ng-repeat angularjs-ng-init