如何在指令(树组件)和AngularJS应用程序中的任何其他控制器或指令之间通信?
首先,我读了很多你们分享的关于控制器之间通信的信息,现在我对最好的方式感到困惑。我知道我应该使用服务,但从你们写的例子中我真的不知道它意味着什么 以下是我的设想: 我的页面左侧有一个带有简单文件夹/文件树的侧栏。我使用了angular Tree组件,它对我非常有用: 在页面的右侧,我有一个视图正在被用户导航更改。 每次用户选择树上的任何节点时,我都希望能够告诉任何右侧页面控制器选择了哪个节点。树上的每个选择都应该通知任何想要侦听该更改的人如何在指令(树组件)和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
我不喜欢从服务中使用$rootScope和fire event,这是唯一的方法吗?为了说明如何做到这一点,我创建了一些示例代码,使用服务在控制器和指令之间共享数据:
app.factory('SharedService', function() {
return {
sharedObject: {
value: ''
}
};
});
希望这有帮助这似乎是最好的办法。它正是你想做的。如果您使用事件进行通信,我看不出服务有任何用处。指令可以直接访问$rootScope服务,控制器有$scope。您寻求的通信的性质是什么?如果只是为了共享数据,我会说你最好的选择是使用服务,我也不喜欢使用$rootScope。如果你的右侧指令$scope是controllers$scope的子指令,那么你应该从当前的$scope发出$emit,你也可以使用这个用于angularjs的pubsub库,它稍微优化了通信,但是最好的方法是服务。如果有两个相同指令的实例呢?该服务有一个实例,您如何知道您正在应用哪一个实例?10倍!这确实有助于理解。如果你有相同的指令,但有两次,就像tree指令一样,但你有两棵树。服务是单例的,所以您如何在服务中告诉他应该更新哪个指令。在这种情况下可以做什么?如果您的指令有依赖项,那么解决它的一种方法是通过属性传递它应该监视的值,请查看plunkr,我刚刚用一个示例更新了它:这有帮助吗?