如何使指令适用于我稍后插入DOM的元素?

时间:2014-11-20 10:21:08

标签: angularjs angularjs-directive

我需要有条件地将ng-disabled应用于由控制器包含但在原始编译时不存在的元素。它稍后由AJAX回调创建,需要根据特定条件启用/禁用。我想它需要一个指令,但我该怎么做呢?

我需要使用ng-disabled而没有其他解决方案,因为IE< 11很好地处理了它,它不支持指针事件。


真正的代码太复杂了,不能在这里引用,但让我重新解释一下这个问题。 一个jQuery lib做了类似的事情:

$.get(url, function(){
  $('<a class="btn"/>').appendTo(myDiv)
});

myDiv位于角度控制器内。编译/指令链接时不存在<a/>元素。在附加后,我应该调用一些代码来测试并应用ng-disabled条件。它应该是指令还是手表?

2 个答案:

答案 0 :(得分:0)

您可以使用ngIf创建一个指令(以便在ngIf条件等于true时创建它。您可以在响应返回后启用此条件)。然后在链接功能中你可以:

link: function( scope, element, attrs ){
     element.removeAttr("name-of-the-directive");
     element.attrs("ng-disabled", "{{myExpression}}");
     $compile( element)(scope);



}

必须使用行element.removeAttr("name-of-the-directive");来避免无限编译循环。

答案 1 :(得分:0)

当您手动将代码插入DOM时,首先需要compile it and link it to your scope


如果您的用例允许,您可以尝试在模板中使用ng-bind-html,然后只需将加载的代码放入$scope属性,而无需自己$compile。< / p>