我有一个指令,当其中一个属性的值发生变化时,使用$ observe来观察。当触发时,我需要能够检索属性的未评估的值而不是评估值。
所以我的HTML看起来像这样:
<div my-attrib="{{scopeVar}}"></div>
然后我的指令中的链接功能:
attrib.$observe('myAttrib', function(val) {
// Both val and attrib.myAttrib contain "ABC"
// I would like the uncompiled value instead
var evaluatedValue = attrib.myAttrib;
});
如果控制器已经这样做了:
$ scope.myAttrib =“ABC”;
当$ observe首先,evaluatetedValue返回“ABC”。我实际上需要它返回“{{scopeVar}}”。
编辑:根据以下来自FrançoisWahl的评论,我最终将其移动到ng-repeat元素中,该元素绑定到一个项目的数组。然后我只是删除/添加更新$ scope的控制器中的新项目。这消除了检索未编译属性值的需要,并且实际上清理了很多东西。在查看视图时,这绝对是奇怪的,因为它不能立即清楚为什么它在转发器中,但它是值得的,因为它清理了相当多的代码。
答案 0 :(得分:4)
你必须在指令链接的compile:
函数中抓住它:
.directive('myAttrib', function() {
return {
compile: function(tElement, tAttrs) {
var unevaluatedValue = tAttrs.myAttrib;
return function postLink(scope, element, attrs) {
attrs.$observe('myAttrib', function(val) {
// Both val and attrib.myAttrib contain "ABC"
// I would like the uncompiled value instead
var evaluatedValue = attrs.myAttrib;
console.log(unevaluatedValue);
console.log(evaluatedValue);
});
}
}
}
})
示例Plunker: http://plnkr.co/edit/bHDmxJvnENqz8Mpg1qpd?p=preview
希望这有帮助。