角度Vue.prototype的等效项是什么?

时间:2019-06-15 15:34:53

标签: angular vue.js singleton

一年前以来我一直在使用Vue.js,现在我开始使用Angular,我习惯于在所有组件之间使用Vue.prototype共享对象实例,因此我不需要在每个组件中调用它。

例如称呼这个。$ toast。

我不知道Angular中是否有类似的东西。

我正在使用Angular 8。

我阅读了有关单例服务的指南,但它不断将实例传递给我需要的组件的构造函数 https://angular.io/guide/singleton-services

2 个答案:

答案 0 :(得分:0)

我不是femiller Vue.prototype,但可以创建一个在所有组件之间共享的单例对象,并使用添加到提供程序列表到app.module级别的服务的服务

import { Injectable } from '@angular/core';

@Injectable({
  providedIn:"root" // ?
})
export class SharedService {

  constructor() { }

}
  

不在您不使用providerIn您可以手动添加服务tio   app.module

import { SharedService } from './shared.service';

@NgModule({
  imports:      [ BrowserModule, FormsModule ],
  declarations: [ AppComponent, HelloComponent ],
  bootstrap:    [ AppComponent ],
  providers: [SharedService] // ?
})
export class AppModule { }

该服务将创建一次,并在您每次注入任何组件时都注入相同的瞬间

答案 1 :(得分:0)

可以在Vue中修改

Vue.prototype,以提供全局依赖性并更改所有应用程序组件的行为。 Angular中没有同类产品,自AngularJS以来就放弃了应用程序范围依赖的概念。

Vue.prototype修改的缺点与优点相同,它为应用程序提供了全局作用域,并更改了整个应用程序的行为。如果该行为是不希望的,则不能轻易将其与应用程序分离。这阻止了应用程序的某些部分易于提取和重用。由于第三方扩展程序可以自由修改Vue.prototype,因此修改可能会以意想不到的方式发生冲突,例如$toast名称可由两个不同的扩展名/插件使用。

另一方面,Angular需要一些样板代码,以实现更好的应用程序体系结构。它大量利用依赖注入,可以通过注入Toast服务来访问常用的单例:

class Component {
  constructor(public toast: Toast) {}
}

可能存在导致DRYer组件的基本组件类。通常,使用基类需要依赖的数量很大,这意味着类设计有问题。

有可能放弃依赖注入并单靠ES模块,这导致更少的样板但更多的缺点,例如测试。