Javascript 使用AngularJS递归创建指令中的控制器定义函数
我正在尝试构建一个动态树组件,即类似于文件夹结构。我希望动态加载子级,因此与其他模块希望在初始化期间显示整个结构不同,我希望在需要时加载元素 因此,我将控制器函数绑定到指令。这是我的HTML:Javascript 使用AngularJS递归创建指令中的控制器定义函数,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我正在尝试构建一个动态树组件,即类似于文件夹结构。我希望动态加载子级,因此与其他模块希望在初始化期间显示整个结构不同,我希望在需要时加载元素 因此,我将控制器函数绑定到指令。这是我的HTML: <tree-model data="treedata" load-children="loadTree(n)" /> 这是我的控制器: app.controller('MyCtrl', function ($scope, $log, $http) { $scope.treedat
<tree-model data="treedata" load-children="loadTree(n)" />
这是我的控制器:
app.controller('MyCtrl',
function ($scope, $log, $http) {
$scope.treedata = { "label": "Root", "status": "collapsed", "screen": "Root", "id": "999999", "hasChildren": true };
$scope.loadTree = function(node) {
$scope.output = "Node: " + node;
node.children =[
{ "label": "Child 1", "status": "collapsed", "screen": "Child 1", "id": "999997", "hasChildren": true},
{ "label": "Child 2", "status": "normal", "screen": "Child 2", "id": "999995", "hasChildren": false}
];
};
});
所以我想递归地构建这棵树。这适用于第一个节点,我的控制器函数loadTree()
将预期的节点
作为输入。但是,在子步骤中,它调用loadTree()
,但不将节点作为参数传递
这似乎在某种程度上与隔离作用域有关。如果我这样做
scope.$parent.$parent.loadChildren({n: selectedNode});
而不是
scope.loadChildren({n: selectedNode});
在指令的展开部分,参数传递起作用
这里有一个plunker来演示这个问题:问题在于如何在指令的模板内调用方法。应该这样称呼:
'<tree-model data="c" load-children="loadChildren({n : n})" />'
“”
您的代码在此处稍作修改:
哇,非常感谢!最后是如此简单和合乎逻辑,但我可能从来没有想到这一点。。。
'<tree-model data="c" load-children="loadChildren({n : n})" />'