我有两个控制器,并希望在它们之间"发送"对象.我有这样的事情:
@NgController(selector: '[users]', publishAs: 'ctrl')
class UsersController {
List<Users> users;
}
@NgController(selector: '[user_logs]', publishAs: 'ctrl')
class LogsController {
List<Log> logs;
void filterLogsFor(User user) { logs = ... }
}
class MyAppModule extends Module {
MyAppModule() {
type(LogsController);
type(UserController);
}
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案只是将LogsController作为依赖项添加到UserController,并从模板中调用ctrl.logsCtrl.filterLogsFor(user)之类的东西.但它不会出于某种原因 - 我发现DI创建另一个新对象LogController与模板本身无关 - 我甚至尝试更改为"value(LogsController,new LogsController())",但它同样 - 它创建新的MysModule调用新的LogsController,然后新的另一个模板我想.我显然做错了什么 - 但文档没有帮助,而且angularjs似乎根本不相似.
更新:想象一下两个表(控制者) - 用户和日志,每个用户行都有链接显示分配给他的日志.
使用最新的AngularDart库(0.10.0),GünterZöchbauer的解决方案仍然正确,但语法有所改变:
// Receiver
//import 'dart:async';
String name;
Scope scope;
ReceiverConstructor(this.scope) {
Stream mystream = scope.on('username-change');
mystream.listen(myCallback);
}
void myCallback(ScopeEvent e) {
this.name = e.data;
}
// Sender
scope.emit("username-change", "emit");
scope.broadcast("username-change", "broadcast");
scope.parentScope.broadcast("username-change", "parent-broadcast");
scope.rootScope.broadcast("username-change", "root-broadcast");
Run Code Online (Sandbox Code Playgroud)
你可以使用
*scope.$emit
*scope.$broadcast
*scope.$on
@grohjy的解决方案也可能有效,具体取决于您的要求
Scope scope;
UserController(this.scope) { // get access to the scope by adding it to the constructor parameter list
// sender
scope.$emit('my-event-name', [someData, someOtherData]); // propagate towards root
scope.$broadcast('my-event-name', [someData, someOtherData]); // propagate towards leaf nodes (children)
scope.$parent.$broadcast('my-event-name', [someData, someOtherData]); // send to parents childs (includes silblings children)
scope.$root.$broadcast('my-event-name', [someData, someOtherData]); // propagate towards leaf nodes starting from root (all nodes)
// receiver
scope.$on('my-event-name', (ScopeEvent e) => myCallback(e)); // call myCallback when an `my-event-name` event reaches me
}
Run Code Online (Sandbox Code Playgroud)
只需编写scope.$emit(或其他方法之一)和ctrl+ mouseclick导航到doc注释以获取更多信息.
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |