Dart 如何在角省道控制器之间通信

Dart 如何在角省道控制器之间通信,dart,angular-dart,Dart,Angular Dart,我有两个控制器,希望在它们之间“发送”对象。我有这样的想法: @NgController(选择器:“[users]”,发布为:“ctrl”) 类UsersController{ 列出用户名单; } @NgController(选择器:“[user_logs]”,发布为:“ctrl”) 类日志控制器{ 列出日志; void filterLogsFor(用户){logs=…} } 类MyAppModule扩展模块{ MyAppModule(){ 类型(日志控制器); 类型(用户控制器); } }

我有两个控制器,希望在它们之间“发送”对象。我有这样的想法:

@NgController(选择器:“[users]”,发布为:“ctrl”)
类UsersController{
列出用户名单;
}
@NgController(选择器:“[user_logs]”,发布为:“ctrl”)
类日志控制器{
列出日志;
void filterLogsFor(用户){logs=…}
}
类MyAppModule扩展模块{
MyAppModule(){
类型(日志控制器);
类型(用户控制器);
}
}
我的解决方案只是将LogsController作为依赖项添加到UserController中,并从模板中调用类似于ctrl.logsCtrl.filterLogsFor(用户)的东西。但由于某些原因,它无法工作-我发现DI创建了另一个与模板本身无关的新对象LogController-我甚至尝试更改为“value(LogsController,new LogsController())”,但它是相同的-它在调用new MyAppModule时创建新的LogsController,然后为模板创建另一个新的LogsController,我猜。我显然做错了什么——但文档并没有帮助,angularjs看起来一点也不相似

更新:
假设有两个表(控制器)——用户和日志,每个用户行都有显示分配给他的日志的链接

我没有完全理解你的问题,你能不能把整个代码都包括进去以便更好地理解

下面是一个可能回答您问题的示例: 您可以使用
*
范围。$emit

*
范围。$broadcast

*
scope.$on

@grohjy的解决方案也可能有效,具体取决于您的需求

范围;
UserController(this.scope){//通过将作用域添加到构造函数参数列表来访问该作用域
//寄件人
作用域。$emit('my-event-name',[someData,someOtherData]);//向根传播
scope.$broadcast('my-event-name',[someData,someOtherData]);//传播到叶节点(子节点)
scope.$parent.$broadcast('my-event-name',[someData,someOtherData]);//发送给父母子女(包括silblings子女)
scope.$root.$broadcast('my-event-name',[someData,someOtherData]);//从根开始向叶节点传播(所有节点)
//接受者
scope.$on('my-event-name',(ScopeEvent e)=>myCallback(e));//当“my-event-name”事件到达我时调用myCallback
}

只需编写
scope.$emit
(或其他方法之一)并按住ctrl+mouseclick键导航到文档注释以获取更多信息。

使用最新的AngularDart库(0.10.0),Günter Zöchbauer的解决方案仍然正确,但语法有所改变:

//接收机
//导入“dart:async”;
字符串名;
范围;
接管人(本范围){
Stream mystream=scope.on('username-change');
侦听(myCallback);
}
void myCallback(范围事件e){
this.name=e.data;
}
//寄件人
范围.emit(“用户名更改”、“emit”);
广播范围(“用户名更改”、“广播”);
scope.parentScope.broadcast(“用户名更改”、“父广播”);
scope.rootScope.broadcast(“用户名更改”、“根广播”);

我想创建独立的服务是可行的,但是…我觉得简单的事情太复杂了。我没有js和angularjs的背景,有没有在AngularDart中使用这个例子?