我创建了一个相当简单的手风琴,包括一个手风琴指令和一个手风琴项目指令。外部手风琴指令只是为物品注册和传达提供了一种方式(例如,当一个人被点击时,其他人应该关闭)。
手风琴似乎正常工作,直到我将一个嵌入另一个。当我打开或关闭属于内部手风琴的面板时,它会切换父母手风琴的包含项目。
我知道这与继承的范围有关,因为如果我从内部手风琴我调用console.log(范围)它会记录2个范围对象,但是我不确定如何让内部手风琴不继承父级的范围仍然正常,因为它需要访问我已授予其访问权限的HTML属性。
希望代码更有意义。
angular.module('app.directives').directive('AccordianItem', [function () {
return {
require:'^Accordian',
restrict: 'EA',
scope: {
isOpen: '=?',
isDisabled: '=?'
},
link: function (scope, element, attrs, accordionCtrl) {
// Watch the isOpen variable
scope.$watch('isOpen', function(value) {
// Open or close this panel
if (value){
scope.openPanel();
}
else{
scope.closePanel();
}
});
scope.openPanel = function(){
// Removed for brevity
};
scope.closePanel = function(){
// Removed for brevity
};
// Toggle function
scope.toggleOpen = function() {
// Removed for brevity
};
// Add trigger behaviour
element.find('.accordian-trigger').on('click', function (event) {
scope.toggleOpen();
});
}
};
}]);
非常感谢任何建议。
答案 0 :(得分:0)
卫生署!我很傻。内部指令不调用外部指令的切换函数,外部指令使用内部指令的触发器本身。这是违规行。
element.find('。accordian-trigger')。on('click',function(event){
它显然会将行为附加到任何子指令中具有该类的任何元素。
现在,如果我能找到一个jQuery选择器,它会寻找“.accordian-trigger”,但是当它到达“.accordian”时不会更深入