我有以下问题:
我有一个自定义指令,通过在模板字符串中使用ng-repeat来显示一个或多个表。在每个表中,放置了几个其他自定义指令。我希望这些知道所使用元素的索引,但无法完成这项工作。我的代码现在看起来像这样:
.directive('myStuffText', function ($rootScope){
return {
restrict: 'A',
require: '^form',
replace: true,
scope: true,
template:
......
'<table border="1" ng-repeat="elt in myModel.newStuffList">
......
'<tr>' +
'<td colspan="3"><div my-add-some-editor my-element-index="$index"/></td>' +
'</tr>'
'</table>',
link: function (scope, elt, attrs){
scope.cockpitPolicyModel.newPolicyList = [];
}
};
})
独立于我的尝试,我总是在my-add-some-editor指令的模板函数中得到字符串$ index或{{$ index}},而不是它的值..
编辑 - 添加了嵌套指令:
.directive('myAddSomeEditor', function($rootScope){
return {
restrict: 'A',
require: '^form',
scope: true,
template: function ($scope, $attr){
return
.....
'<span id="myAddSomeEditor" name="myAddSomeEditor" class="form-control" my-generic-editor '+
'my-input-mapping="myModel.someText"></span>'
.....
;
}
};
})
答案 0 :(得分:1)
这可能是因为在你的my-add-some-editor
指令中你在隔离范围中有这个定义:
myElementIndex: '@'
这就是为什么你要在HTML中获得你在那里写的字的字符串。
将其更改为:
myElementIndex: '='
编辑:由于您说您没有使用隔离范围,请在父指令中尝试:尝试执行my-element-index="{{$index}}"
。这在儿童指令的链接功能中:
link: function (scope, elem, attr) {
attr.$observe('index', function(val) {
scope.index = val;
});
}