2

Я хочу знать, есть ли способ получить доступ к области директивы, если я установил для опции replace значение true. Например, вот начальный jsbin: http://jsbin.com/ABuSODub/2/editAngularJS: доступ для выделения области действия с заменой в директиве

Когда вы нажимаете на x, директива закрывается. Функция close() определена в области собственной изоляции объекта. Однако, если я устанавливаю замену на true, вещь перестает работать, что понятно, потому что директивы больше нет.

Можно ли его заставить работать? Там есть лучший подход. Я действительно не хочу устанавливать функцию close на родительском контроллере. Или это какая-то другая проблема, которую я не вижу?

+0

Ваш код бросает ошибки 'TypeError: Невозможно вызвать метод«разбить»из undefined' –

+0

@IlanFrumer Извините за это. Я исправил их и обновил ссылку выше. –

+0

проблема с ng-при создании новой вложенной области, поэтому элемент transcluded не может правильно видеть родителя. Вы можете протестировать, удалив ng-if с ng-show, и ваша проблема будет решена easlily –

ответ

0

Если все, что вы хотите сделать с событием клика, установлено open = false, вам не нужно вызывать функцию для этого. Рассмотрим эту версию шаблона:

'<div class="alert-box {{box}}" data-ng-if="open" data-ng-init="open = false"><span data-ng-transclude></span><a href="#" class="close" data-ng-click="open = !open">&times;</a></div>', 
+0

Да, это решит проблему. Но я думаю, что это открытое будет загрязнять сферу действия контроллера и приведет к забавным вещам, когда несколько оповещений будут задействованы в том же объеме. Если я закрою один, разве это не повлияет на всех остальных? –

+0

Не следует. Я использовал эту стратегию в ng-repeat (создание древовидного представления) без проблем. –

Смежные вопросы