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>