Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套的角度指令触发父对象上的作用域函数_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Javascript 嵌套的角度指令触发父对象上的作用域函数

Javascript 嵌套的角度指令触发父对象上的作用域函数,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我已经创建了一个相当简单的手风琴,其中包括一个手风琴指令和手风琴项目指令。外部手风琴指令只是为项目提供了一种注册和通信的方式,例如,当单击一个项目时,其他项目应关闭 手风琴似乎工作正常,直到我把一个套在另一个里面。当我打开或关闭属于内部手风琴的面板时,它会切换父手风琴的包含项 我知道这与继承的作用域有关,因为如果我从内部accorbian控制台中运行console.logscope,它会记录2个作用域对象,但我不确定如何让内部accorbian不继承父级的作用域,并且仍然正常工作,因为它需要访问

我已经创建了一个相当简单的手风琴,其中包括一个手风琴指令和手风琴项目指令。外部手风琴指令只是为项目提供了一种注册和通信的方式,例如,当单击一个项目时,其他项目应关闭

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

我知道这与继承的作用域有关,因为如果我从内部accorbian控制台中运行console.logscope,它会记录2个作用域对象,但我不确定如何让内部accorbian不继承父级的作用域,并且仍然正常工作,因为它需要访问我授予它访问权限的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();


            });


        }        

    };

}]);

任何建议都将不胜感激。

Doh!我当时很蠢。内部指令没有调用外部指令的toggle函数,外部指令正在为自己使用内部指令的触发器。这是令人不快的界线

元素。查找“.accordian trigger”。在“单击”时,函数事件{

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


现在,如果我能找到一个jQuery选择器,它将查找.accorbian触发器,但当它到达一个.accorbian

作用域时,它不会再深入。accorbian

作用域不会从它们的父级继承。但是你可以使用$scope.$parent访问父级作用域。看看这里:我的内部accorbian如何能够意外调用父级accorbian触发器的函数范围?抱歉,我似乎误解了您的问题。您可以添加嵌套accordion时使用的标记吗?此外,accordion指令的代码也会很有帮助