嵌套Angular指令触发父项的范围函数

时间:2015-03-04 22:42:56

标签: javascript angularjs angularjs-directive angularjs-scope

我创建了一个相当简单的手风琴,包括一个手风琴指令和一个手风琴项目指令。外部手风琴指令只是为物品注册和传达提供了一种方式(例如,当一个人被点击时,其他人应该关闭)。

手风琴似乎正常工作,直到我将一个嵌入另一个。当我打开或关闭属于内部手风琴的面板时,它会切换父母手风琴的包含项目。

我知道这与继承的范围有关,因为如果我从内部手风琴我调用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();


            });


        }        

    };

}]);

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

卫生署!我很傻。内部指令不调用外部指令的切换函数,外部指令使用内部指令的触发器本身。这是违规行。

element.find('。accordian-trigger')。on('click',function(event){

它显然会将行为附加到任何子指令中具有该类的任何元素。

现在,如果我能找到一个jQuery选择器,它会寻找“.accordian-trigger”,但是当它到达“.accordian”时不会更深入