2013-08-28 67 views
0

我一直在嘗試編寫具有動態標識的輸入字段的自定義指令,該指令無法獲取正確的標識。無法獲得自定義指令中已解析的屬性

<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; 
}); 

我的問題是,我怎麼能得到指令中的解析值。由於其他原因,我也不能在這裏使用任何隔離的範圍。

預先感謝

回答

3

可以使用$observe觀察到含有插值屬性的值改變(例如SRC = 「{{欄}}」)。這不僅非常高效,而且它也是輕鬆獲得實際值的唯一方法,因爲在鏈接階段插值尚未進行評估,因此此時將值設置爲未定義

post: function (scope, element, attrs) { 
    attrs.$observe('id', function (id) { 
     console.log(id) 
    }) 
} 
+0

謝謝!這對我有效。 – hRud

0

如果你只想在鏈接功能,一旦評估值,可以使用$插值(記得把它注入到你的指令):

console.log($interpolate(element.attr('id'))(scope)); 

但是,因爲你很可能使用ng-repeat(因爲使用$index)我更喜歡@ sza的答案,因爲您的列表可能會更改,因此您可能需要對列表中的更改做出反應。