Javascript angular 1.5中的组件通信
Angular 1.5组件通信建议通常有输出绑定来调用根控制器上的方法 假设我有一个根组件和两个子组件Javascript angular 1.5中的组件通信,javascript,angularjs,angularjs-directive,custom-component,Javascript,Angularjs,Angularjs Directive,Custom Component,Angular 1.5组件通信建议通常有输出绑定来调用根控制器上的方法 假设我有一个根组件和两个子组件 <root> <child-1></child-1> <child-2></child-2> </root> 它希望通过读取组件2上的值,然后在根目录中执行某些操作来对组件1上的按钮单击做出反应 例如,child-1是一个指令,用于包装图形库,该图形库将图形附着到其DOM节点,并具有一个变量来控制该图
<root>
<child-1></child-1>
<child-2></child-2>
</root>
它希望通过读取组件2上的值,然后在根目录中执行某些操作来对组件1上的按钮单击做出反应
例如,child-1
是一个指令,用于包装图形库,该图形库将图形附着到其DOM节点,并具有一个变量来控制该图形
child-2
有一个按钮。单击时,来自child-1
变量的数据应传递给root,root对其进行处理
具体来说,child-1
wrappsvar graph2d=new vis.graph2d(容器、数据集、选项)代码>。稍后,我想从graph2d
中检索一些信息,并将其传递到root
以对其进行处理
这归结为:组件如何对其他组件发出的事件作出反应?输入和输出建议似乎不包括该场景。在angular 1.5中,您可以使用require和/或属性绑定(输入/输出)进行通信
如果使用require属性,则根组件将发布api,子组件将获得对控制器的引用:
angular.module('app').component('child1', {
bindings: {},
require: {api: '^root'}, //your <root> component
template: '',
controller: controller
});
这是根组件控制器功能:
$ctrl.addWatchedBook = addWatchedBook;
function addWatchedBook(bookName){
booksWatched.push(bookName);
}
下面是一个完整的架构概述:使用双向绑定并将数据注入两个组件:child-1控制器child-2
@zeroplagl基本上,我想问的是,在一个组件需要对另一个组件的事件做出反应的情况下,两个不相交的组件如何与输入和输出进行通信。您可以在更高级别的组件上保持状态,也可以使用$rootScope在组件之间进行通信。$broadcast据我所知,根组件保存相关数据(或至少可以访问),child-2组件触发根组件响应的事件。当子组件需要响应异步请求时,使用require
是否被认为是最佳方法?即,编辑表单组件通过&
绑定将其保存方法委托给父组件,但需要对服务器错误/成功回调作出反应rom父级?我觉得这不是一个好方法,因为子级知道父级组件。它应该是相反的。子级应该只通过与父级/容器组件绑定的&
绑定来发出事件/函数。
$ctrl.addWatchedBook = addWatchedBook;
function addWatchedBook(bookName){
booksWatched.push(bookName);
}