在 Angular 2.0 中,将没有$scope
.
有什么替代方法?我将如何在组件之间共享数据?该scope
选项会在指令中提供吗?更实际的是,是否有我可以熟悉的当前替代方案?
我知道,controller as
但我读到控制器也将被淘汰。
Angular 团队开始对这样的革命感到困惑。
在 Angular 2.0 中,将没有$scope
.
有什么替代方法?我将如何在组件之间共享数据?该scope
选项会在指令中提供吗?更实际的是,是否有我可以熟悉的当前替代方案?
我知道,controller as
但我读到控制器也将被淘汰。
Angular 团队开始对这样的革命感到困惑。
在 Angular2 中,您使用共享服务而不是$scope
https://angular.io/docs/ts/latest/cookbook/component-communication.html
@Injectable()
class SharedService {
someState:String;
someEventStream:Subject<String> = new Subject<String>();
}
@Component({
selector: ...,
providers: [SharedService]
})
class MyComponent {
constructor(private sharedService:SharedService) {}
}
对于上面示例中的每个提供者([SharedService]
是 的缩写[{provide: SharedService, useClass: SharedService}]
),维护一个实例。
这种提供者的范围是提供它的组件,并且当没有后代注册相同的提供者时,它是后代。
当组件请求依赖constructor(private sharedService:SharedService)
时,Angulars DI(依赖注入)开始查看组件自己的提供程序,然后向上查看根组件,然后是在引导程序中注册的提供程序。它返回它找到的第一个。
如果两个组件注入了相同的实例(来自同一个提供者),那么它们可以通过订阅和发出事件Subject
或读取和写入状态或通过调用服务上的方法来使用此服务进行通信。
虽然你仍然需要一些东西,比如观察者和事件,但使用controller as
是习惯于在没有情况下工作的好方法。Angular 2.0 中并没有真正删除控制器。但不会有. 您将不再拥有控制器和视图,而是拥有本质上封装控制器和视图的指令。$scope
$scope
ng-controller
我根本不会担心 2.0。角度团队说过:
尝试学习处于开发早期的东西可能会在很大程度上浪费您的时间。话虽如此,如果您确实想在 Angular 2.0 上快速入门,那么 1.3 引入的新路由器 - 到目前为止 - 他们打算用于 2.0 的路由器
Angular 2 不像 Angular 1 那样在组件之间共享数据。相反,他们所做的是通过在模板中使用它来传递数据并传递事件(仅使用事件默认具有的气泡行为)。并且您可以使用组件类访问模式中的数据(如果您不知道我所说的类是什么意思,请查看 Youtube 上的 1000000000“角度 2 - 如何开始”视频)。
我们可以在 Angular 中做到这一点,而无需将服务注入到组件类中。通过使用 rxjs 主题“行为主题”,它携带我们的数据,满足与 $scope 变量相同的要求
这是一个stackblitz示例,我const letter
在sub.service.ts
其中导出了一个订阅了必要组件的内容。