Подтвердить что ты не робот

Проверьте, существует ли директива Angular

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

Мы называем эту директиву object-list, и мы надеемся делегировать ее по нескольким различным директивам, если мы сможем заставить ее работать правильно.

Основная проблема, которую нам необходимо решить, заключается в том, существует ли в нашей системе директива, предоставленная этой директивой object-list. То, как мы проверяем это, выдает $compile против целевой директивы, связывая ее с областью действия и проверяя ее содержимое HTML (например, var tmpElement = $compile('<div my-message'></div>')(scope);). Кажется, что это работает, когда шаблон для целевой директивы ссылается на параметр template, но когда мы вместо этого пытаемся указать на templateUrl, содержимое HTML пусто.

Здесь Plunker, с подходом templateUrl (не работает). Вы можете прокомментировать это и раскомментировать строку template, чтобы увидеть оповещение.

http://plnkr.co/edit/wD4ZspbGSo68v4eRViTp

Есть ли другой способ проверить существование директивы? Я признаю, это выглядит немного взломанным.

4b9b3361

Ответ 1

Вы можете использовать $injector.has, чтобы проверить, существует ли поставщик или экземпляр.

app.directive('objectList', function ($compile, $injector) {
  return {
    template: 'OK',
    link: function (scope, element, attrs) {
      var exist = $injector.has('myMessageDirective');
      ...
    }
  };
});