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
如何在指令(树组件)和AngularJS应用程序中的任何其他控制器或指令之间通信?_Angularjs_Angularjs Directive_Angularjs Scope_Angular Ui_Angular Ui Bootstrap - Fatal编程技术网

如何在指令(树组件)和AngularJS应用程序中的任何其他控制器或指令之间通信?

如何在指令(树组件)和AngularJS应用程序中的任何其他控制器或指令之间通信?,angularjs,angularjs-directive,angularjs-scope,angular-ui,angular-ui-bootstrap,Angularjs,Angularjs Directive,Angularjs Scope,Angular Ui,Angular Ui Bootstrap,首先,我读了很多你们分享的关于控制器之间通信的信息,现在我对最好的方式感到困惑。我知道我应该使用服务,但从你们写的例子中我真的不知道它意味着什么 以下是我的设想: 我的页面左侧有一个带有简单文件夹/文件树的侧栏。我使用了angular Tree组件,它对我非常有用: 在页面的右侧,我有一个视图正在被用户导航更改。 每次用户选择树上的任何节点时,我都希望能够告诉任何右侧页面控制器选择了哪个节点。树上的每个选择都应该通知任何想要侦听该更改的人 我不喜欢从服务中使用$rootScope和fire ev

首先,我读了很多你们分享的关于控制器之间通信的信息,现在我对最好的方式感到困惑。我知道我应该使用服务,但从你们写的例子中我真的不知道它意味着什么

以下是我的设想: 我的页面左侧有一个带有简单文件夹/文件树的侧栏。我使用了angular Tree组件,它对我非常有用:

在页面的右侧,我有一个视图正在被用户导航更改。 每次用户选择树上的任何节点时,我都希望能够告诉任何右侧页面控制器选择了哪个节点。树上的每个选择都应该通知任何想要侦听该更改的人


我不喜欢从服务中使用$rootScope和fire event,这是唯一的方法吗?

为了说明如何做到这一点,我创建了一些示例代码,使用服务在控制器和指令之间共享数据:

app.factory('SharedService', function() {
  return {
    sharedObject: {
      value: ''
    }
  };
});

希望这有帮助

这似乎是最好的办法。它正是你想做的。如果您使用事件进行通信,我看不出服务有任何用处。指令可以直接访问$rootScope服务,控制器有$scope。您寻求的通信的性质是什么?如果只是为了共享数据,我会说你最好的选择是使用服务,我也不喜欢使用$rootScope。如果你的右侧指令$scope是controllers$scope的子指令,那么你应该从当前的$scope发出$emit,你也可以使用这个用于angularjs的pubsub库,它稍微优化了通信,但是最好的方法是服务。如果有两个相同指令的实例呢?该服务有一个实例,您如何知道您正在应用哪一个实例?10倍!这确实有助于理解。如果你有相同的指令,但有两次,就像tree指令一样,但你有两棵树。服务是单例的,所以您如何在服务中告诉他应该更新哪个指令。在这种情况下可以做什么?如果您的指令有依赖项,那么解决它的一种方法是通过属性传递它应该监视的值,请查看plunkr,我刚刚用一个示例更新了它:这有帮助吗?