Tôi đang cố gắng mở rộng chức năng tabular-ui và tôi đang gặp sự cố với việc gói nó.Đóng gói chỉ thị tabular-ui và gặp phải các lỗi "Nhiều chỉ thị yêu cầu cho phạm vi chuyển đổi/cô lập phạm vi"
plunker Đây là chỉ thị tabset un-bọc:
http://plnkr.co/edit/AhG3WVNxCal5fZOUbSu6?p=preview
plunker này chứa nỗ lực đầu tiên của tôi tại gói chỉ thị tabset:
http://plnkr.co/edit/naKXbeVOS8nizwDPUrkT?p=preview
Các gói cách tiếp cận ban đầu là thẳng - bao bì bên trong. Nhưng ... tôi giới thiệu các div phụ trong mẫu thay thế để tránh "Nhiều chỉ thị yêu cầu phạm vi bị cô lập" và "Nhiều chỉ thị yêu cầu chuyển đổi" các lỗi góc và để đảm bảo việc chuyển đổi xảy ra.
chính đoạn mã:
.directive('urlTabset', function() {
return {
restrict: 'E',
transclude: true,
replace: true,
scope: {
tabManager: '='
},
controller: [ "$scope", function($scope) {
var tabManager = $scope.tabManager;
}],
template:
'<div>' +
'<tabset>' +
'<div ng-transclude>' +
'</div>' +
'</tabset>' +
'</div>'
};
})
.directive('urlTab', function() {
return {
require: '^urlTabset',
restrict: 'E',
transclude: true,
replace: true,
scope: { tabName: '@' },
link: function(scope, element, attrs, urlTabsetCtrl) {
},
template:
'<div>' +
'<tab>' +
'<div ng-transclude>' +
'</div>' +
'</tab>' +
'</div>'
};
});
Tuy nhiên, tôi nghĩ rằng divs thêm trong mẫu đang gây ra vấn đề. Đây là tập hợp chưa được mở với các div phụ ở những vị trí mà mẫu của tôi sẽ thêm chúng.
http://plnkr.co/edit/kjDs7xJcZqltCAqUSAmX?p=preview
Vì vậy, điều logic là để loại bỏ các divs ... nhưng đây là nơi tôi cần sự giúp đỡ. Có ai biết một cách sạch sẽ để làm điều này mà không cần nhấn "Nhiều chỉ thị yêu cầu cho phạm vi bị cô lập" và "Nhiều chỉ thị yêu cầu cho việc chuyển đổi" các lỗi góc. Đây là một lần thất bại.
http://plnkr.co/edit/0C6lFNhfdTVcF7ahuN3G?p=preview
Error: Multiple directives [urlTab, tab] asking for transclusion on: <tab class="ng-isolate-scope ng-scope">
BTW, trong trường hợp bạn đang tự hỏi những gì tôi đang cố gắng để làm, mục tiêu cuối cùng của tôi là sử dụng thuộc tính tabManager truyền cho urlTabset tự động cư trường trong chỉ thị tab (được bao bọc bởi urlTab). Để cụ thể hơn, đây là những gì tôi đang hướng tới:
.directive('urlTab', function() {
return {
require: '^urlTabset',
restrict: 'E',
transclude: true,
replace: true,
scope: { tabName: '@' },
link: function(scope, element, attrs, urlTabsetCtrl) {
scope.tabs = urlTabsetCtrl.tabs;
scope.tabSelected = urlTabsetCtrl.tabSelected;
},
template:
'<tab active="tabs[tabName].active" disabled="tabs[tabName].disabled" select="tabSelected(tabName)" ng-transclude>' +
'</tab>'
};
});
Mẫu ở trên rõ ràng không hoạt động, nhưng nó cung cấp cho bạn ý chính về những gì tôi đang cố gắng làm.
Và tôi đồng ý với giải pháp yêu cầu chỉ thị gói không có phạm vi bị cô lập. Tôi có thể giải quyết vấn đề này bằng cách lưu trữ trạng thái trong ngữ cảnh của trình điều khiển.
Cảm ơn trước hết vì phản hồi của bạn. Tôi đánh giá cao nó. Trình soạn thảo của tôi đã được đơn giản hóa từ những gì tôi muốn làm - đó là sử dụng trạng thái tabManager (được chỉ định trong urlTabset) để tự động điền các thuộc tính trong chỉ thị tab (được bao bọc bởi urlTab). Vì vậy, nó không phải là một tăng cường nghiêm ngặt. Có nghĩa là cách tiếp cận này sẽ không làm việc cho tôi. Bất kỳ ý tưởng nào khác? – Amir
Tôi nghĩ nếu nó chỉ thêm thuộc tính bạn có thể làm điều đó thông qua 'attrs' thay vì sử dụng mẫu. Vì vậy, miễn là chỉ thị của bạn là trên cùng một yếu tố như là một trong những bạn muốn thay đổi. – Andyrooger
Thú vị. Bạn đang đề xuất trong giai đoạn biên dịch thêm thuộc tính vì vậy khi chỉ thị gói xử lý chúng trong chức năng biên dịch/liên kết của nó, nó sẽ thấy chúng. Nhưng điều này sẽ không xử lý các biến trong phạm vi cô lập của chỉ thị được gói như 'chọn' cho tab. Hoặc có lẽ kể từ khi biên dịch được đặt hàng, tất cả sẽ tập luyện. Tuy nhiên nó là một chút hacky. Tôi không muốn phải làm một cái gì đó như thế này "". Tôi muốn gói thực sự để html trông sạch sẽ "". Nhưng tôi đánh giá cao nỗ lực của bạn/chia sẻ ý tưởng. Tôi hy vọng có một cách đơn giản để đạt được gói sạch. –
Amir