loại bỏ thay thế: true trên thị theo tên 'lw' ..
Đó cũng nên giải quyết.
cập nhật fiddle: updated fiddle
app.directive('lw', function(){
return {
restrict: 'E',
scope: {
items: "="
},
template: '<listie items="items"></listie>',
controller: function($scope) {
}
}
});
Phân tích:
những gì gây ra vấn đề?
với thay thế = true cho chỉ thị lw điều gì xảy ra là lw đã cô lập phạm vi, bây giờ là thay thế = true, phần tử được thay thế mà chính nó có phạm vi cách ly đã được thay thế ở đó, vì vậy những gì bạn vô tình làm là bạn đã thử để cung cấp cho hai phạm vi cho cùng một phần tử listie.
mã cấp quan sát trong angular.js phiên bản 1.2.1:
dòng 5728: chức năng applyDirectivesToNode là hàm để thực thi biên dịch trên thị và đây trong dòng 5772 họ làm việc kiểm tra này nếu chúng ta đang cố gắng để gán trùng lặp phạm vi hoặc nói cách khác cùng một yếu tố với hai phạm vi.
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));
}
}
ở trên là chức năng kiểm tra và nếu trong trường hợp có cố gắng chỉ định hai phạm vi cho cùng một yếu tố thì lỗi đó sẽ bị lỗi. Vì vậy, đây là cách nó được thiết kế để được và không phải là một lỗi.
lý do thay thế: xóa thực sự giải quyết được sự cố?
bằng cách loại bỏ thay thế phạm vi isolate lồng nhau cũng giống như
<lw items="items" class="ng-isolate-scope">
<div items="items" class="ng-isolate-scope">
..........
</div>
</lw>
tại sao gói trong một div cũng sẽ làm việc (đây là giải pháp của bạn mà bạn coi là workaround)?
Điểm cần lưu ý là div không phải là phần tử có phạm vi cách ly riêng biệt. Nó chỉ là một phần tử. ở đây trên thay thế bạn đang gắn phạm vi cô lập của lw được gắn vào một div. (LƯU Ý: Bản thân div không có phạm vi cách ly), vì vậy không có 2 phạm vi cách ly gắn vào cùng một phần tử div. do đó không có trùng lặp nên bước khẳng định đã trôi qua và nó bắt đầu hoạt động.
Vì vậy, đây là cách nó được thiết kế để làm việc và chắc chắn nó không phải là một lỗi.
Bò thánh, câu trả lời tuyệt vời, cảm ơn! –
Để giữ chức năng 'thay thế: đúng', tôi chọn để bọc mẫu trong div thay thế. Nó giải quyết vấn đề và kết quả html là "sạch hơn" với 'thay thế: đúng'. Cảm ơn câu trả lời! –
Nhờ lời giải thích ngắn gọn đó! Bạn đã cứu tôi rất nhiều thời gian! –