AngularJS, сочетающий использование двух настраиваемых директив с общей областью

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

Ошибка: несколько директив [...], запрашивающих изолированную область действия...

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

Спасибо Том

3 ответа

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

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


Ниже приводится краткое описание того, как области действия схемы можно объединить в ссылке на метод $compile.

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

  • no scope + no scope = > Две директивы, не требующие собственной области действия, будут использовать свою родительскую область
  • дочерняя область + без видимости = > Обе директивы будут разделять одну область с одним дочерним узлом
  • дочерняя область + область содержимого = > Обе директивы будут разделять одну область с одним дочерним узлом
  • изолированная область видимости + без видимости = > изолированная директива будет использовать ее собственную созданную изолированную область. Другая директива будет использовать родительскую Объем
  • изолированная область видимости + дочерняя область = > Не будет работать! Только один объект может быть связан с одним элементом. Поэтому эти директивы не могут применяться к тому же элементу.
  • изолированная область видимости + изолированная область = > Не будет работать! Только один объект может быть связан с одним элементом. Поэтому эти директивы не могут применяться к тому же элементу.


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

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

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

licensed under cc by-sa 3.0 with attribution.