Ответ 1
удалите replace: true в директиве по имени 'lw'..
Это также должно решить.
обновленная скрипта: обновленная скрипка
app.directive('lw', function(){
return {
restrict: 'E',
scope: {
items: "="
},
template: '<listie items="items"></listie>',
controller: function($scope) {
}
}
});
Анализ:
что вызвало проблему?
с заменой = true для директивы lw, что происходит: lw имеет выделение области, теперь как replace = true, замененный элемент, который сам изолировал область, был заменен там, поэтому то, что вы неосознанно сделали, вы пытались дать две области для одного и того же элемента списка.
проверка уровня кода в angular.js версия 1.2.1:
строка 5728: function applyDirectivesToNode - это функция, которая выполняет компиляцию по директиве, и здесь, в строке 5772, они делают это, проверяя, пытаемся ли мы назначить дублируемую область действия или, другими словами, тот же элемент с двумя областями.
function assertNoDuplicate(what, previousDirective, directive, element) {
if (previousDirective) {
throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',
previousDirective.name, directive.name, what, startingTag(element));
}
}
выше - это функция, которая выполняет эту проверку, и если в случае попытки назначить две области для одного и того же элемента, это приведет к ошибке. Так вот как он создан, а не ошибка.
зачем заменить: истинное удаление решает проблему?
удалив replace: true, что произошло, вместо новой директивы listie вместо lw, она добавлена в нее, поэтому она является одной изолированной областью, вложенной в другую, что абсолютно правильно и разрешено. область вложенных изолятов похожа на
<lw items="items" class="ng-isolate-scope">
<div items="items" class="ng-isolate-scope">
..........
</div>
</lw>
, почему также будет работать упаковка в div (это ваше решение, которое вы считали обходным)?
Следует отметить, что div не является элементом с отдельной областью выделения. Это просто элемент. здесь, на замену, вы прикрепляете область изоляции lw, которая должна быть прикреплена к div. (ПРИМЕЧАНИЕ: сам div не имеет области выделения), поэтому нет 2 изолированных областей изоляции к тому же элементу div. поэтому нет дублирования, поэтому шаг подтверждения прошел, и он начал работать.
Итак, так оно и работает, и определенно это не ошибка.