时间:2021-07-01 10:21:17 帮助过:3人阅读
main component
组件中做这个事情,但这很得难保证在其他的组件中有效使用,有没有更新的办法做这个事情 呢,请继续往下看。在官方文档是这样描述的:APP_INITIALIZER 是一个函数,在应用程序初始化时被调用。这就意味着可以通过 AppModule 类的 providers 以 factory 的形式配置它来使用,同时应用程序将会等待它加载完成后进行下一步,所以在这此只适合加载简单的数据。
ng new example --skip-install npm install # yarn install
首先创建一个 provider ,它会在请求解析完成后返回一个 Promise 对象
@Injectable() export class JokesProvider { private joke:JokeModel = null; constructor(private http:Http){ } public getJoke(): JokeModel { return this.joke; } load() { return new Promise((resolve,reject) => { this.http.get(url) .map(r=>r.json()) .subscribe(r=> { this.joke = r['value']; resolve(true); }) }) } }
这里会经过三个过程:
getJoke() 方法在其他组件或模块调用时直接返回 joke 当前保存的数据
私有属性 joke 会保存当前请求的数据
load() 函数会在应用程序初始时立即调用
export function jokesProviderFactory(provider: JokesProvider){ return () => provider.load(); }
@NgModule({ declarations:[ AppComponent ], imports:[ BrowserModule,// required HttpModule// required ], providers: [ JokesProvider, { provide:APP_INITIALIZER,useFactory: jokesProviderFactory, deps:[JoesProvider], multi:true } ], bootstrap:[AppComponent] }) export class AppModule { }
@Component({
selector:'app',
template:`<h1>Joke of the day: </h1><p>{{jokeModel.joke}} </p>`
})
export class AppComponent implements OnInit{
title = 'app';
jokeModel : JokeModel;
constructor(jokesProvider: JokesProvider){
this.jokeModel = jokesProvider.getJoke();
}
ngOnInit(){
console.log('AppComponent: OnInit()');
}
}
以上就是理解Angular 中 APP_INITIALIZER 的作用的详细内容,更多请关注Gxl网其它相关文章!