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

Javascript 角度指令到指令调用

Javascript 角度指令到指令调用,javascript,angularjs,Javascript,Angularjs,如果有一个指令在一个页面上多次使用,那么一个指令如何与另一个指令通信 我试图在父子关系中将指令链接在一起。单击指令A时,我希望筛选指令B,使其仅包含指令A中所选项目的子项。在这种情况下,页面上可能有无限多个指令和关系 通常我会有一个指令在它的每个子级上调用一个filter方法,每个子级调用它的子级以继续向下过滤层次结构 但我不知道是否可以将方法从一个指令调用到另一个指令 谢谢听起来您正在寻找一个指令控制器。您可以使用指令的require:参数拉入另一个指令的控制器。看起来是这样的: app.di

如果有一个指令在一个页面上多次使用,那么一个指令如何与另一个指令通信

我试图在父子关系中将指令链接在一起。单击指令A时,我希望筛选指令B,使其仅包含指令A中所选项目的子项。在这种情况下,页面上可能有无限多个指令和关系

通常我会有一个指令在它的每个子级上调用一个filter方法,每个子级调用它的子级以继续向下过滤层次结构

但我不知道是否可以将方法从一个指令调用到另一个指令


谢谢

听起来您正在寻找一个指令控制器。您可以使用指令的
require:
参数拉入另一个指令的控制器。看起来是这样的:

app.directive('foo', function() {
  return {
    restrict: 'A',
    controller: function() {
        this.qux = function() {
          console.log("I'm from foo!");
        };
    },
    link: function(scope, element, attrs) {

    }
  };
});

app.directive('bar', function() {
    return {
        restrict: 'A',
        require: '^foo',
        link: function(scope, element, attrs, foo) {
            foo.qux();
        }
    };
});
从角度文档中,以下是可用于require的符号及其作用

(no prefix) - Locate the required controller on the current element.
? - Attempt to locate the required controller, or return null if not found.
^ - Locate the required controller by searching the element's parents.
?^ - Attempt to locate the required controller by searching the element's parents, or return null if not found.
下面是我的示例的jsbin

另一个可能适用于您所需的选项是提供一个服务,每个指令设置一个监视并可以对其进行操作。例如,directive1可以监视服务中的属性并响应更改,还可以设置一个可以更改该属性的按钮。然后,directive2还可以监视和更改服务,无论您如何设置,他们都会相互响应。如果你也需要一个jsbin,请告诉我


我希望这有帮助

您可以尝试将所有数据放入一个服务中,指令可以在每个引用中引用该服务

比如:

app.factory('selectedStuffService', function(){
    var allItems = [];
    var selectedItems = [];

    function addSelectedItem(item){
         selectedItems.push(item);
    }

    return {
        allItems: allItems,
        selectedItems: selectedItems,
        addSelectedItem: addSelectedItem
    }
}

指令A中的交互会更改selectedItems数组中的值,指令B可以绑定到该数组。您可以轻松地向服务添加其他方法,以根据需要过滤/操作项目,使用该服务的任何指令都应该能够根据其他指令所做的更改进行更新。

非常感谢。在这种情况下,我们对每个表重复使用相同的指令,因此require将不起作用(我不认为?)。我们需要通过变量告诉表哪些表是它的子表,控制器需要通过某种类型的id(如html元素id)动态查找子表的控制器。有可能吗?嗯,你可以用这种方式很容易地找到示波器。这应该可以做到
var myScope=angular.element('#myElement').scope()
。我真的不太清楚你在这里干什么。听起来很乱。另一个听起来与我相关的想法是,您可以使用指令的工厂-这里的区域:
.directive('myDirective',function(){//this area!!return{
对于指令每次运行都可以看到的对象或数组之类的内容,如果每次运行中都有一些共享信息,则可以将其添加到数组或对象中供其他人使用。@jadent如果有任何帮助,我将感谢upvote/answer accept:)我看到其他人已经剽窃了我一半的回复,并将其用作他们的答案。另外,请参阅此处了解一起更新$scope属性的服务的传统用法。