一年前以来我一直在使用Vue.js,现在我开始使用Angular,我习惯于在所有组件之间使用Vue.prototype共享对象实例,因此我不需要在每个组件中调用它。
例如称呼这个。$ toast。
我不知道Angular中是否有类似的东西。
我正在使用Angular 8。
我阅读了有关单例服务的指南,但它不断将实例传递给我需要的组件的构造函数 https://angular.io/guide/singleton-services
答案 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.prototype
,以提供全局依赖性并更改所有应用程序组件的行为。 Angular中没有同类产品,自AngularJS以来就放弃了应用程序范围依赖的概念。
Vue.prototype
修改的缺点与优点相同,它为应用程序提供了全局作用域,并更改了整个应用程序的行为。如果该行为是不希望的,则不能轻易将其与应用程序分离。这阻止了应用程序的某些部分易于提取和重用。由于第三方扩展程序可以自由修改Vue.prototype
,因此修改可能会以意想不到的方式发生冲突,例如$toast
名称可由两个不同的扩展名/插件使用。
另一方面,Angular需要一些样板代码,以实现更好的应用程序体系结构。它大量利用依赖注入,可以通过注入Toast服务来访问常用的单例:
class Component {
constructor(public toast: Toast) {}
}
可能存在导致DRYer组件的基本组件类。通常,使用基类需要依赖的数量很大,这意味着类设计有问题。
有可能放弃依赖注入并单靠ES模块,这导致更少的样板但更多的缺点,例如测试。