Как обнаружить, что директива B находится внутри директивы A

0

Поэтому на странице у меня есть 3 угловых пользовательских директивы AA BB и CC. Иногда BB находится внутри AA

<AA>
  <BB></BB>
</AA>

В другое время BB находится внутри CC

<CC>
  <BB></BB>
</CC>

Подумайте об этом
1) Я показываю BB внутри просмотра просмотра
2) Я показываю BB на какой-то приборной панели
Я бы хотел обнаружить внутри контроллера BB, если BB находится внутри директивы AA или CC. Я могу проверить путь в URL-адресе ($ location), но может быть, есть другой способ?

Теги:
angularjs-directive

3 ответа

0
Лучший ответ

Хорошо, чтобы развернуть мой комментарий, если вы используете require в своей директиве, вы можете передать массив имен директив, и если они установлены как необязательные, это не приведет к ошибке, если требуемая директива не будет найдена. Вместо этого он просто вернется в массив контроллеров undefined. Установка необходимых контроллеров в качестве необязательных осуществляется путем указания имени директивы с помощью ? , Caret ^ говорит ему, чтобы найти необходимый контроллер, выполнив поиск элемента и его родителей. Начиная с версии 1.3, вы даже можете использовать ^^ чтобы попытаться найти требуемый контроллер, только для поиска родительских элементов (так что с этим вы не можете иметь обе директивы для одного и того же элемента).

Поэтому вы можете сделать это:

app.directive('BB', function() {
return {
  require: ['?^AA','?CC'],
  link: function(scope, element, attrs, controllers) {
     parent = controllers[0] ? 'AA' : 'CC';
     alert(parent);
  }
}
  • 0
    Привет, хорошо, я думаю, что дополнительное требование может работать на меня.
0

Используйте require key в возвращаемом значении вашего объявления директивы.

require: '^myTabs',

Вот пример сайта AngularJS:

app.directive('myPane', function() {
return {
  require: '^myTabs'
 }

http://plnkr.co/edit/KR9bgWesS8pl8Qq06aJq?p=preview

Существует также статья, объясняющая об этом директивном сообщении.

https://thinkster.io/a-better-way-to-learn-angularjs/directive-to-directive-communication

0

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

Кроме того, вы проходите DOM вверх до элемента body и проверяете элемент директивы.

Примеры скоро последуют...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню