Lev*_*ler 175 javascript typescript angular
为什么ngOnInit()在Injectable课程解决后没有打电话?
码
import {Injectable, OnInit} from 'angular2/core';
import { RestApiService, RestRequest } from './rest-api.service';
@Injectable()
export class MovieDbService implements OnInit {
constructor(private _movieDbRest: RestApiService){
window.console.log('FROM constructor()');
}
ngOnInit() {
window.console.log('FROM ngOnInit()');
}
}
Run Code Online (Sandbox Code Playgroud)
控制台输出
FROM constructor()
Run Code Online (Sandbox Code Playgroud)
Sas*_*sxa 279
生命周期钩子,就像OnInit()使用指令和组件一样.它们不适用于其他类型,例如您的服务中的服务.来自docs:
组件具有由Angular自己管理的生命周期.Angular创建它,渲染它,创建和渲染它的子节点,在数据绑定属性发生变化时对其进行检查并在将其从DOM中删除之前对其进行破坏.
指令和组件实例具有生命周期,因为Angular会创建,更新和销毁它们.
注意:此答案仅适用于 Angular 组件和指令,不适用于服务。
ngOnInit当(和其他生命周期挂钩)没有为我的组件触发时,我遇到了同样的问题,并且大多数搜索将我引导到这里。
问题是我使用的是箭头函数语法 ( =>),如下所示:
class MyComponent implements OnInit {
// Bad: do not use arrow function
public ngOnInit = () => {
console.log("ngOnInit");
}
}
Run Code Online (Sandbox Code Playgroud)
显然这在 Angular 6 中不起作用。使用非箭头函数语法可以解决这个问题:
class MyComponent implements OnInit {
public ngOnInit() {
console.log("ngOnInit");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89965 次 |
| 最近记录: |