我一直在尝试为具有动态ID的输入字段编写自定义指令,在指令中无法获取正确的ID。
<input id="myInput{{$index}}" my-dir="fn()"/>
myApp.directive('myDir', function ($parse) {
var obj = {
require: "ngModel",
link: {
post: function (scope, element, attrs) {
var fn = $parse(attrs.myDir);
var elementId = element.attr('id');
console.log(elementId); // Here I see myInput{{$index}} instead of myInput0, by this time angular is not resolving the value
}
}
};
return obj;
});
我的问题是,如何在指令中获得已解析的值。此外,由于其他原因,我不能在这里使用任何孤立的范围。
提前致谢
答案 0 :(得分:3)
您可以使用$observe观察包含 插值 的属性的值更改(例如src =“{{bar}}”)。这不仅非常有效,而且它也是轻松获得实际值的唯一方法,因为在连接阶段尚未评估插值,因此此时的值设置为未定义。
post: function (scope, element, attrs) {
attrs.$observe('id', function (id) {
console.log(id)
})
}
答案 1 :(得分:0)
如果你只想在链接函数中评估一次值,你可以使用$ interpolate(记得把它注入你的指令):
console.log($interpolate(element.attr('id'))(scope));
但是,由于您可能使用ng-repeat(因为使用$index
),我更喜欢@ sza的答案,因为您的列表可能会更改,因此您可能需要对列表中的更改作出反应。< / p>