2015-12-08 2 views
0

В настоящее время я изучаю AngularJS на Udemy с отличным курсом AngularJS JumpStart with Dan Wahlin. Я нахожусь в разделе 7 «Бонус: начало работы» Создание пользовательских директив.AngularJS Множественная проблема с конфликтом ресурсов Директива

Я определил директиву Hello World, которая работает нормально; то я определил новую директиву, чтобы я мог узнать об общей области vs isolate.

Как только я включаю вторую директиву, я получаю следующее сообщение об ошибке:

Error: [$compile:multidir] Multiple directives [helloWorld, helloWorld] asking for template on: <hello-world> 
http://errors.angularjs.org/1.4.8/$compile/multidir?p0=helloWorld&p1=&p2=helloWorld&p3=&p4=template&p5=%3Chello-world%3E 

Here's a Plunker.

Если я прокомментирую скрипт, который определяет один из них, другой работает.

Почему это происходит? Я четко назвал обе директивы по-разному, так почему Angular выбрасывает ошибку, которая в основном говорит, что я дважды объявил одну и ту же директиву?

+0

Используйте хром более легко отлаживать , на консоли вы можете щелкнуть по ошибке, отобразить страницу на угловом веб-сайте с более подробной информацией об ошибке, (полный текст и подробности), а не обрезать, как на консоли – AlainIb

ответ

0

Я думаю, что вопрос определения directives переменной и каждый раз добавляя его к директивам. Более популярным способом определения директив:

var app = angular.module('app'); 
app.directive('helloWorld', ....); 

Или, если вы предпочитаете свой путь, либо имеют все директивы в том же файле, или переместить var directives = angular.module('app').directives в app.js

+0

Спасибо! Я подумал, что у меня костяк, и я понял, что ошибка имеет смысл, если я сделаю шаг назад и осмотрю 'angular.module ('приложение') ._ invokeQueue'. Я обновил свой Plunker до того, который действительно работает здесь: http://plnkr.co/edit/SxAOIMWAcykTx5OGRFsa –

+0

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

1

1) вы забыли добавить «простой: правда» в директивах (если вы поставите непосредственно ваш HTML код в шаблоне вы должны поставить «простой: истинный» в противном случае использовать templateUrl в свой файл HTML)

2) проблема исходят из того, что вы создаете два раза один и тот же угловой модуль:

var directives = angular.module('app').directives; 

Я обновить ваш plunker http://plnkr.co/edit/cYkgdYcHXGlbtMRJHRw2?p=preview

+0

Я понял это; см. [мой комментарий] (http://stackoverflow.com/questions/34151231/angularjs-multiple-directive-resource-contention-error/34151585#comment56062347_34151585) о принятом ответе. –

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