2014-02-19 2 views
4

Я столкнулся с странной проблемой при использовании атрибута template вместо templateUrl.Угловая: разница при использовании шаблона или шаблонаUrl

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

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

См. Это plunkr. Это вызывает ошибку в консоли. Тем не менее, если бы вы заменить (в scripts.js)

template: "<ul kendo-menu k-orientation=\"'vertical'\" k-direction=\"'right'\"></ul>", 

с

templateUrl: 'menu.html' 

распорядительных работ (попробуйте щелкнув правой кнопкой мыши по тексту). Содержимое файла HTML равно точно то же, что и в строке.

У кого-нибудь есть хоть малейшая подсказка, почему возникает эта непоследовательность?

Редактировать: Чтобы избежать путаницы, мне нужно, чтобы была опция пересылки, поскольку я хотел бы повторно использовать этот элемент и иметь возможность настраивать, какие элементы должны отображаться на каждом месте, которое оно используется отдельно.

+0

Я не знаком с kendo-ui, но этот шаблон, похоже, нужно скомпилировать, правильно? – glepretre

+0

@glepretre kendo используется только для отображения компонента меню. Сам шаблон является стандартным угловым, поэтому вам не нужно предварительно компилировать его, чтобы он мог работать. Спасибо, что посмотрели мой вопрос! – thomaux

ответ

1

Видимо это несоответствие было исправлено в новых версиях Угловое.

Мы используем 1.0.8, и правильное поведение (сброс ошибки, когда несколько директив требуют перехода на один и тот же элемент), возникает только при использовании опции template. При использовании опции templateUrl, ошибка не выдается, а директива работает, как ожидалось (который до сих пор поражает мой взгляд)

Edit: фиксированный его с помощью функции compile и удаления параметра replace. Рабочий пример here.

+1

Это был интересный случай. Теперь вы можете принять свой ответ :) – glepretre

1

Я не могу воспроизвести проблему, но проблема здесь в самом деле replace: true в определении директивы menu.

Это значит, что обе команды kendo и команда menu пытались заменить элемент в свою очередь. Сохраняющие menu обертки исправляет проблему: http://plnkr.co/edit/vGhEVNfz35elCtxXSMxO?p=preview

+0

Спасибо за ваш ответ, но удаление замены не устраняет проблему. Угловая ошибка не будет выходить, но директива не будет работать. Странно то, что при использовании 'templateUrl' вместо этого и при сохранении опции' replace', директива работает. – thomaux

1

Проблема возникла из transclude: true и вы забыли добавить свои <li> элементов в шаблоне. Если задано replace: true, оно заменит исходный элемент его дочерними элементами.

Это работает для меня, будь то с помощью template или templateUrl: Updated Plunker

EDIT: Там есть открытый вопрос об этом: https://github.com/angular/angular.js/issues/4357

+0

Спасибо за ваш ответ. Мне нужен параметр 'transclude', потому что я хотел бы определить, что должно отображаться в меню, где оно используется. – thomaux

+0

Хм. он решен с Угловой последней стабильной версией? Я отредактировал мой ответ, чтобы добавить ссылку на открытую тему;) – glepretre

+0

Спасибо за ссылку! Проблема, которую я испытывал (а именно несогласованность), исправлена, хотя в последней версии. – thomaux

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