48

在 Angular 2.0 中,将没有$scope.

有什么替代方法?我将如何在组件之间共享数据?该scope选项会在指令中提供吗?更实际的是,是否有我可以熟悉的当前替代方案?

我知道,controller as但我读到控制器也将被淘汰。

Angular 团队开始对这样的革命感到困惑。

4

6 回答 6

48

Angular 2.0正在使用this而不是$scope.

2.0 中的主要变化之一是控制器的消亡,以及对组件的新重视。转向基于组件的应用程序的一大优势是更容易定义它们的界面;此外,HTML 元素已经在事件、属性和属性中具有易于映射的接口。

在此处查看AngularJS 1.32.0 的迁移。另请参阅此处的Angular 2.0的完整文档

于 2014-11-28T06:19:33.940 回答
20

在 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或读取和写入状态或通过调用服务上的方法来使用此服务进行通信。

于 2016-08-05T05:01:12.230 回答
6

虽然你仍然需要一些东西,比如观察者和事件,但使用controller as是习惯于在没有情况下工作的好方法。Angular 2.0 中并没有真正删除控制器。但不会有. 您将不再拥有控制器和视图,而是拥有本质上封装控制器和视图的指令。$scope$scopeng-controller

于 2014-11-20T19:06:30.253 回答
3

我根本不会担心 2.0。角度团队说过:

现在开始使用 2.0 代码构建任何东西还为时过早——我们仍处于构建项目的早期阶段。

尝试学习处于开发早期的东西可能会在很大程度上浪费您的时间。话虽如此,如果您确实想在 Angular 2.0 上快速入门,那么 1.3 引入的新路由器 - 到目前为止 - 他们打算用于 2.0 的路由器

于 2014-11-14T01:39:31.593 回答
3

Angular 2 不像 Angular 1 那样在组件之间共享数据。相反,他们所做的是通过在模板中使用它来传递数据并传递事件(仅使用事件默认具有的气泡行为)。并且您可以使用组件类访问模式中的数据(如果您不知道我所说的类是什么意思,请查看 Youtube 上的 1000000000“角度 2 - 如何开始”视频)。

于 2016-02-02T12:56:42.377 回答
0

我们可以在 Angular 中做到这一点,而无需将服务注入到组件类中。通过使用 rxjs 主题“行为主题”,它携带我们的数据,满足与 $scope 变量相同的要求

这是一个stackblitz示例,我const lettersub.service.ts其中导出了一个订阅了必要组件的内容。

于 2018-06-21T12:53:00.280 回答