Angular有条件地在指令模板

时间:2016-07-05 11:49:44

标签: javascript angularjs

我在另一个指令中有条件地使用指令时遇到问题, 所以,让我说我有一个指令' myGrid'在它的模板中我有这样的东西:

<table my-grid-resizable>...</table>

我只想在使用myGrid指令时才使用myGridResizable指令:

<my-grid resizable="true" />

但我不想在myGrid指令的模板内使用ng-if。

我试过了:

 if (scope.resizable) {
            angular.element(element).find('table').attr('my-grid-resizable', ''); }

但是它不起作用,属性被添加但是指令不起作用,重新编译指令也没有帮助。

感谢您帮助解决此问题

1 个答案:

答案 0 :(得分:0)

您只是设置属性,但这并不意味着DOM会被它自己消化。您的DOM没有更新的原因是因为您没有更新任何模型或绑定。您只是修改DOM。

所以你必须手动编译你的元素,如

首先,在您的指令或控制器中注入$compile(以适用者为准)

然后做:

if (scope.resizable) {
    angular.element(element).find('table').attr('draco-grid-dynamic-table', '');
    var html = angular.element(element).find('table').html();
    var compiledHtml = $compile(html)(scope);
    angular.element(element).find('table').html(compiledHtml);
}

然而,这种方式有效,但不是一种有角度的方式,而且非常气馁。 我不明白为什么你不想使用ng-if结构。这是有条不紊的做事方式。