替代Angular 2.0中的$ scope

jas*_*hao 44 angularjs-scope angular

在Angular 2.0中,将没有$scope.

有什么替代方案?如何在组件之间共享数据?该scope选项是否可用于指令?更实际的是,有一种当前的替代品,我可以熟悉吗?

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

Angular团队开始对这场革命感到困惑.

Sai*_*idh 44

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

2.0中出现的一个主要变化是控制器的死亡,以及对组件的新重视.转向基于组件的应用程序的巨大优势在于,定义其界面更容易; 此外,HTML元素在事件,属性和属性中已经具有易于映射的界面.

请在此处查看AngularJS 1.32.0 的迁移.也看到了完整的文档角2.0 这里


Gün*_*uer 18

在Angular2中,您使用共享服务而不是$scope https://angular.io/docs/ts/latest/cookbook/component-communication.html

@Injectable()
class SharedService {
  someState:String;
  someEventStream:Subject<String> = new Subject<String>();
}
Run Code Online (Sandbox Code Playgroud)
@Component({
  selector: ...,
  providers: [SharedService] 
})
class MyComponent {
  constructor(private sharedService:SharedService) {}
}
Run Code Online (Sandbox Code Playgroud)

对于上面示例中的每个提供者([SharedService]简称[{provide: SharedService, useClass: SharedService}]),维护单个实例.

这样的提供者的范围是提供它的组件,并且当没有后代具有相同的提供者注册时它是后代.

当组件请求依赖时constructor(private sharedService:SharedService),Angulars DI(依赖注入)开始查看组件自己的提供程序,然后向上查找根组件,然后在bootstrap注册.它返回它找到的第一个.

如果两个组件注入相同的实例(来自相同的提供者),那么他们可以通过订阅和发出Subject或读取和写入状态的事件或通过调用服务上的方法来使用此服务进行通信.


rob*_*rob 6

使用controller as是一种习惯于工作的好方法,$scope尽管你仍然需要$scope一些像监视器和事件这样的东西.在Angular 2.0中并没有真正删除控制器.但是不会有相同的ng-controller.您将拥有基本上封装控制器和视图的指令,而不是拥有控制器和视图.