【发布时间】:2016-01-09 00:54:49
【问题描述】:
我已经经历了大约一个月的角度。
我熟悉它的所有核心方面,但我遇到了一个我不明白的问题。
我有 2 个指令 - 一个是父级,另一个是子级。
孩子从父母那里获得 3 个参数 - 其中 2 个通过,但是当我调试并检查第 3 个参数时 - 它是未定义的。
子指令 -
angular.module('management').directive('timeFrame', function() {
return {
restrict: 'E',
templateUrl: '/Client/directives/timeFrame/timeFrame.html',
scope: {
timeFrame: '=',
deleteFrameFunction: '&',
index: '@'
}
子指令的使用方式如下:
<div class="list-group-item" ng-repeat="timeFrame in ad.timeFrames">
<time-frame index="{{$index}}" timeFrame="timeFrame" deleteFrameFunction="(function() {doStuff;})"></time-frame>
</div>
所有参数都通过,但timeFrame是未定义的。
我尝试更改将其传递给 {{timeFrame}} 或 :ad.timeFrames[{{$index}}] 的方式以及许多其他失败的方式。
我需要使用双向绑定来传递这个参数,因为这个指令会修改它并且父指令必须知道它。
我没有做任何与以相同方式为我工作的其他指令不同的事情。
任何帮助/解释将不胜感激,
提前致谢。
【问题讨论】:
-
在你的 html 中,变量 $index 应该是 index (no $)
-
你试过
ad.timeFrames[$index]吗? -
顺便说一句,您可以将值向下传递,然后使用
$emit将事件发送给父级,而不是双向绑定吗?在父范围内你可以$on来监听事件。 -
@SambhavGore 当前的最佳实践表明,您应该远离在显式绑定就足够的作用域链中发生事件。没有理由在这里介绍额外的事件。如果您正在编写 Angular 1.x 代码并打算在未来转换为 Angular 2.x,则尤其如此。
-
@DavidL 谢谢,我很想了解更多。因为根据我的理解,在 Angular2 中,不鼓励使用 2 路数据绑定,事件将是通知父母下线所做更改的方式。您可以指向任何链接吗?
标签: angularjs angularjs-directive angularjs-ng-repeat