Dart 如果两个不同的组件位于同一视图(ngRoute),它们如何共享一个公共对象或进行通信?

Dart 如果两个不同的组件位于同一视图(ngRoute),它们如何共享一个公共对象或进行通信?,dart,angular-dart,Dart,Angular Dart,在安格拉达特,我可以看到一个风景 在视图上,我有两个组件 <component1 view-string="Component 1"></component1> <component2 view-string="Component 2"></component1> 我希望查看字符串是字符串的一个实例,它可以由component1或component2更改。更改应反映在组件中字符串的显示中 我不知道如何在这个视图中保留字符串,因为这个视图不是

在安格拉达特,我可以看到一个风景

在视图上,我有两个组件

<component1 view-string="Component 1"></component1>
<component2 view-string="Component 2"></component1>

我希望查看字符串是字符串的一个实例,它可以由component1或component2更改。更改应反映在组件中字符串的显示中


我不知道如何在这个视图中保留字符串,因为这个视图不是一个组件。通常我会在视图字符串中使用“{someString}”,如果这个视图确实是一个带有dart对象的组件。

我找到的解决方案是使用控制器,在我的视图中,我可以使用{ctrl.test}来查看控制器字符串

控制器。

在视图中,添加控制器

<div teacher-controller> etc...
等等。。。

我找到的解决方案是使用控制器,在我看来,我可以使用{ctrl.test}来查看控制器字符串

控制器。

在视图中,添加控制器

<div teacher-controller> etc...
等等。。。

解决此问题并仍然使用组件而不是控制器的一种方法是引入一个包含共享数据的类。事实上,这同样适用于控制器,但这是一个没有实际意义的问题,因为控制器似乎正在消失,正如Randal所提到的

(请原谅任何打字错误-我正在文本编辑器中输入,因此可能无法编译。)

步骤1:引入共享类,将其注释为可注入类:

@Injectable()
类MySharedClass
{
字符串mySharedVariable;
}
第2步:确保Angular可以通过告诉Angular来注入类:

类MyInitModule扩展模块{
MyInitModule(){
//你的绑定。。。
//您的组件、控制器与Angular的DI绑定
//这是重要的部分:
绑定(MySharedClass);
//典型的角度.省道绑定:
绑定(RouteInitializerFn,toValue:yourRouteInitializer);
绑定(NgRoutingUshState,toFactory:())=>
新的NgRoutingUsePushState.value(false));
}
main(){
applicationFactory().addModule(新的MyInitModule()).run();
}
步骤3:现在将共享类添加到组件的构造函数中。Angular将自动注入实例,只要您声明对它的需求:

@组件(
选择器:'componentA',
templateUrl:'正确的路径',//在此处插入正确的值。
出版物:“cmp”)
类组件A{
MySharedClass共享类;
ComponentA(this.sharedClass){
}
@组成部分(
选择器:'componentB',
templateUrl:'正确的路径',//在此处插入正确的值。
出版物:“cmp”)
类组件B{
MySharedClass共享类;
组件B(this.sharedClass){
}
现在,您可以访问两个(或更多)组件之间的共享类


(根据Wilson Yeung修改以添加可注射()注释)

解决这个问题的一个方法是引入一个包含共享数据的类,而不是控制器。事实上,这也适用于控制器,但这是一个没有实际意义的问题,因为正如Randal提到的,控制器似乎要消失了

(请原谅任何打字错误-我正在文本编辑器中输入,因此可能无法编译。)

步骤1:引入共享类,将其注释为可注入类:

@Injectable()
类MySharedClass
{
字符串mySharedVariable;
}
第2步:确保Angular可以通过告诉Angular来注入类:

类MyInitModule扩展模块{
MyInitModule(){
//你的绑定。。。
//您的组件、控制器与Angular的DI绑定
//这是重要的部分:
绑定(MySharedClass);
//典型的角度.省道绑定:
绑定(RouteInitializerFn,toValue:yourRouteInitializer);
绑定(NgRoutingUshState,toFactory:())=>
新的NgRoutingUsePushState.value(false));
}
main(){
applicationFactory().addModule(新的MyInitModule()).run();
}
步骤3:现在将共享类添加到组件的构造函数中。Angular将自动注入实例,只要您声明对它的需求:

@组件(
选择器:'componentA',
templateUrl:'正确的路径',//在此处插入正确的值。
出版物:“cmp”)
类组件A{
MySharedClass共享类;
ComponentA(this.sharedClass){
}
@组成部分(
选择器:'componentB',
templateUrl:'正确的路径',//在此处插入正确的值。
出版物:“cmp”)
类组件B{
MySharedClass共享类;
组件B(this.sharedClass){
}
现在,您可以访问两个(或更多)组件之间的共享类


(根据Wilson Yeung修改为添加Injectable()注释)

Greg Sherman使用MySharedClass的回答是正确的,但缺少@Injectable()注释。您需要类似以下内容:

import 'package:angular/angular.dart';

@Injectable()
class MySharedClass {
  String mySharedVariable;
}

Greg Sherman使用MySharedClass的回答是正确的,但缺少@Injectable()注释。您需要类似以下内容:

import 'package:angular/angular.dart';

@Injectable()
class MySharedClass {
  String mySharedVariable;
}

当然,控制器被弃用了…邮件列表上对此进行了有趣的讨论。那么,如果我不能使用控制器,我该怎么办?我可以在页面中有一个父控制器来保存数据并以某种方式在它们之间引用吗?…我很困惑。当然,控制器被弃用了…邮件列表上的有趣讨论关于这一点。那么,如果我不能使用控制器,我该怎么办?我能在页面中有一个父控制器来保存数据并以某种方式引用它们吗?…我太困惑了。