Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 使用AngularJS递归创建指令中的控制器定义函数_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 使用AngularJS递归创建指令中的控制器定义函数

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

我正在尝试构建一个动态树组件,即类似于文件夹结构。我希望动态加载子级,因此与其他模块希望在初始化期间显示整个结构不同,我希望在需要时加载元素

因此,我将控制器函数绑定到指令。这是我的HTML:

<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})" />'