Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 - Fatal编程技术网

Javascript 如何将对象从具有隔离作用域的嵌套指令传递到角域中的父控制器作用域

Javascript 如何将对象从具有隔离作用域的嵌套指令传递到角域中的父控制器作用域,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个指令树视图,其中包含每个呈现项的嵌套指令(即分支) 在这两个指令的范围内,我声明了两个应该与父控制器对话的参数 filter:“&”//将嵌套指令(分支)中的方法筛选器绑定到树指令属性中的方法doSomething(),该属性绑定到绑定到控制器的html指令 iobj:'='是双向绑定参数,应将作用域对象传递给控制器。(但目前不是) 指令: app.directive('tree', function () { return { restrict: 'E',

我有一个指令树视图,其中包含每个呈现项的嵌套指令(即分支)

在这两个指令的范围内,我声明了两个应该与父控制器对话的参数

filter:“&”
//将嵌套指令(分支)中的方法筛选器绑定到树指令属性中的方法doSomething(),该属性绑定到绑定到控制器的html指令

iobj:'='
是双向绑定参数,应将作用域对象传递给控制器。(但目前不是)

指令:

app.directive('tree', function () {
    return {
        restrict: 'E', 
        replace: true,
        scope: {
            t: '=src',
            filter: '&',
            iobj: '='
        },
        controller: 'treeController',
        template: '<ul><branch ng-repeat="c in t.children" iobj="object" src="c" filter="doSomething()"></branch></ul>'
    };
});

app.directive('branch', function($compile) {

    return {
        restrict: 'E', 
        replace: true, 
        scope: {
            b: '=src',
            filter: '&',
            iobj: '='
        },

        template: '<li><input type="checkbox" ng-click="innerCall()"  ng-hide="visible" /><a>{{ b.name }}</a></li>',
        link: function (scope, element, attrs) {
           var has_children = angular.isArray(scope.b.children);
            scope.visible = has_children;
            if (has_children) {
                element.append('<tree src="b"></tree>');
                $compile(element.contents())(scope);
            }
            element.on('click', function(event) {
                event.stopPropagation();
                if (has_children) {
                    element.toggleClass('collapsed');
                }
            });
            scope.innerCall = function () {
                scope.iobj = scope.b;

                console.log(scope.iobj);
                scope.filter();
            }
        }
    };
});
目前,我可以从指令调用函数
$scope.doSomething
。因此我知道我可以从指令访问控制器范围。我不知道如何将对象作为参数从指令传递回控制器。运行此代码时,
$scope.object
始终是一个空对象


我非常感谢任何关于如何进行这项工作的帮助或建议

指令绑定支持参数传递。以你为例

scope.filter({message: 'Hello', anotherMessage: 'Good'})
消息
anotherMessage
成为绑定到指令的表达式中的局部变量:

<tree src="myList" iobj="object" filter="doSomething(anotherMessage, message)"></tree>

下面是一个在模板中设置回调参数的示例

报告明确指出:

通常需要通过 表达式,这可以通过传递 将局部变量名称和值放入表达式包装器fn中。对于 例如,如果表达式是
increment(amount)
,那么我们可以指定 通过调用
localFn
作为
localFn({amount:22})
调用amount值

scope.filter({message: 'Hello', anotherMessage: 'Good'})
<tree src="myList" iobj="object" filter="doSomething(anotherMessage, message)"></tree>