无法在custom指令中获取已解析的属性

时间:2013-08-28 19:26:22

标签: angularjs angularjs-directive

我一直在尝试为具有动态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;
});

我的问题是,如何在指令中获得已解析的值。此外,由于其他原因,我不能在这里使用任何孤立的范围。

提前致谢

2 个答案:

答案 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>