Tôi đang cố gắng tạo một chế độ xem ảnh bằng AngularJS.Chỉ thị tùy chỉnh đệ quy sử dụng ngRepeat
Dưới đây là mã của tôi:
module.directive('treeview', function() {
return {
restrict: 'E',
templateUrl: "/templates/ui/controls/treeview.htm",
replace: true,
transclude: true,
scope: {},
link: function (scope, element, attrs) {
console.log("treeview directive loaded");
},
controller: function ($scope, $rootScope) {
$rootScope.depth = 0;
$scope.items = [
{ text: "face" },
{ text: "palm" },
{
text: "cake",
childitems: [
{ text: "1 face" },
{ text: "1 palm" },
{ text: "1 cake" }
]
}
];
}
};
});
module.directive('treeviewItem', function() {
return {
restrict: 'E',
templateUrl: "/templates/ui/controls/treeview-item.htm",
replace: true,
scope: {
item: "="
},
link: function (scope, element, attrs) {
console.log("treeview item directive loaded");
}
};
});
Treeview mẫu:
<div class="sl-treeview">
<ul class="clear" ng-transclude>
<treeview-item ng-repeat="item in items" item="item"></treeview-item>
</ul>
</div>
Treeview hàng mẫu:
<li>
<i class="icon-plus-sign"></i>
<a href="/">
<i class="icon-folder-close"></i>
{{item.text}}
</a>
<!-- This ul is the issue - it crashes the page -->
<ul>
<treeview-item ng-repeat="childitem in item.childitems" item="childitem"></treeview-item>
</ul>
</li>
Trong chỉ thị treeview $scope.items
là hardcoded cho sự phát triển - cuối cùng tôi hy vọng điều này sẽ đến từ một bộ điều khiển/dịch vụ lấy dữ liệu từ dịch vụ r. Tuy nhiên nó đại diện cho loại cấu trúc cơ bản mà tôi đang tìm kiếm.
Khi tôi chạy điều này mà không có nested lồng nhau trong treeviewItem nó mang lại cho tôi ba mục đầu tiên tốt. Khi tôi thêm ul vào để thử và có được các điều khiển để ràng buộc với các mục con nó tay trang và ngừng làm việc.
JSFiddle mà không ul lồng nhau - làm việc: - (! Và có thể treo trình duyệt của bạn)
JSFiddle với ul lồng nhau không làm việc:
Làm thế nào tôi nên đi về tạo một điều khiển sử dụng một chỉ thị tùy chỉnh và ngRepeat để tạo ra các mức đệ quy vô hạn? Tại sao phương pháp tiếp cận của tôi không hoạt động?
Tôi bắt gặp biên dịch $ xem các ví dụ khác về số lần xem tre và đó là tùy chọn tôi đã thực hiện. Nó hoạt động rất đẹp. Rằng bạn cho lời giải thích lý do tại sao phương pháp tiếp cận ban đầu của tôi không hoạt động, nó hiển nhiên bây giờ! Không quan tâm, tại sao bạn lại xem 'item.childitems'? Sẽ không thêm một ul cho mỗi mục con? – Jon
@ Jon Tôi không nên sử dụng '$ watch' như vậy trong câu trả lời ban đầu của tôi, nó sẽ đơn giản nối thêm một' '' bất cứ khi nào 'childitems' thay đổi. Tôi đã cập nhật câu trả lời của mình mà không sử dụng '$ watch'. Ngoài ra, bạn có thể chia sẻ ví dụ về treeview mà bạn đã tìm thấy trong câu hỏi của mình để mọi người có thể hưởng lợi nhiều hơn từ câu hỏi của bạn không? –
Điều này không còn hoạt động trong các phiên bản mới hơn của góc (> 1.2) –