我想知道是否有一种简单的方法来完成这种属性指令:
<p my-attr-directive="ABC">go to ABC</p>
应该在ui-router参数化链接中重新编译:
<p ui-sref="param_state({id:'ABC'})">go to ABC</p>
状态param_state
已修复,新指令应定义参数id
。
编辑:我差不多完成了,我不确定为什么$ compile,不编译
<a href="#" my-attr-directive="2a"> LINK!!</a>
app.directive('myAttrDirective', function($compile) {
return {
restrict: 'A',
link: function($scope, el, $attrs) {
$attrs.$set("uiSref","param_state({id:'"+$attrs.myAttrDirective+"'})");
$compile(el.contents())($scope);
}
};
});
答案 0 :(得分:1)
我差不多完成了,我不确定为什么$ compile,不编译
如果你检查了锚元素,你会看到类似下面的内容,
<span class="ng-scope">LINK!</span>
这意味着$compile
完成了它的工作。在这方面,只需将元素的内容(即textNode
&#39; LINK!&#39;)绑定到$scope
。
因此,$compile
正在进行编译,但在搜索的任何地方都找不到您动态添加的指令uiSref
。
$compile(el.contents())($scope); // <== your directive exists as an attribute of `el` itself
尝试编译主机element
本身,因为您将uiSref
指令添加为属性。此外,从元素中删除my-attr-directive
属性非常重要,否则您最终将无限地编译锚元素:
link: function($scope, el, $attrs) {
// make sure you don't recursively compile
el.removeAttr('my-attr-directive');
$attrs.$set("uiSref","param_state({id:'"+$attrs.myAttrDirective+"'})");
$compile(el)($scope); // <== here
}