2016-07-05 4 views
1

У меня есть проблемы с помощью директивы условно внутри другой директивы, так скажем, у меня есть одна директива «myGrid» и это шаблон у меня есть что-то вроде этого:Угловая условно использование директивы атр в шаблоне директивы

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

и я хочу использовать myGridResizable директиву, только если я использую myGrid директиву, как это:

<my-grid resizable="true" /> 

Но я не хочу использовать нг-если внутри шаблона myGrid директивы.

Я попытался это:

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

Но это не работает, добавляется атрибут, но директива не работает, перекомпиляции директиву is't помогает также.

Спасибо за помощь в решении этой

ответ

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. Это угловой способ делать вещи.

+0

Нет, я тоже не пытался скомпилировать до – Michal

+0

И я не хочу использовать ng-if, чтобы не дублировать код – Michal

+0

@Michal Да, вы не хотите дублировать код. Существует один способ избежать дублирования много кода, хотя. Вы можете обернуть то, что когда-либо должно было пройти внутри 'ng-if', в отдельный файл шаблона и' ng-include' внутри 'ng-if' – Chanthu