2013-05-27 5 views
4

У меня есть две различные пользовательские директивы, оба из которых имеют изолированный объем. Есть ли способ, чтобы использовать обе директиву на тот же элемент, не получая:AngularJS, объединяющий использование двух настраиваемых директив с общим областью

Ошибки: Несколько директив [...] просить изолированную сферу на ...

Я думал, что они разделяют общий объем по делать так, но оказывается, что не будет (как я получаю эту ошибку) ...

Благодарности Том

ответ

2

ОК, я workarounded этот вопрос, используя тот же контроллер для моих обеих директив, что позволяет им для обмена областью, отличной от родительской области ...

Меня все еще интересуют любые предложения по этому вопросу.

0

Ну, я думаю, что Angular дает вам выбор между работой с родительской областью и взаимодействием между директивами.

Вы можете достичь последней, добавив интерфейс в директиву «master», добавив функцию контроллера, которую потребляет «подчиненная» директива. Ведомое устройство объясняет зависимость через require: '^masterDirective' и может использовать свой интерфейс в функции link.

Смотрите официальное объяснение с хорошим, например: https://docs.angularjs.org/guide/directive#creating-directives-that-communicate

1

Там в резюме того, как директива прицелы могут быть объединены в ссылке на $compile method.

Главное, что изоляционные области никогда не используются совместно, и что элемент может иметь не более одной области, прикрепленной к нему. Если в ваших директивах вместо этого используется дочерняя область, она будет разделяться между обеими директивами.

  • no scope + no scope => Two directives which don't require their own scope will use their parent's scope
  • child scope + no scope => Both directives will share one single child scope
  • child scope + child scope => Both directives will share one single child scope
  • isolated scope + no scope => The isolated directive will use it's own created isolated scope. The other directive will use its parent's scope
  • isolated scope + child scope => Won't work! Only one scope can be related to one element. Therefore these directives cannot be applied to the same element.
  • isolated scope + isolated scope => Won't work! Only one scope can be related to one element. Therefore these directives cannot be applied to the same element.
Смежные вопросы