首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角-通用ngOnInit

角-通用ngOnInit
EN

Stack Overflow用户
提问于 2020-07-15 05:54:14
回答 2查看 140关注 0票数 0

如果我在每个组件中

代码语言:javascript
复制
ngOnInit() {
  console.log('hello world');
}

如何避免在每个组件中编写该代码?我能写一些通用的代码来触发每个组件的onInit,也许在它们的模块中吗?或者是在他们共同使用的服务中,例如?

关于NavigationStartNavigationEnd.,我也有同样的问题

Thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-15 06:34:06

最简单的方法是从基本组件扩展:

代码语言:javascript
复制
@Component({
    selector: 'base-component',
    template: '',
    changeDetection: ChangeDetectionStrategy.OnPush
})
export class BaseComponent implements OnInit {

 ngOnInit (): void {
  console.log('hello world');
 }
}

并在子组件中使用extends BaseComponent,例如:

代码语言:javascript
复制
@Component({
    selector: 'child-component',
    template: '',
    changeDetection: ChangeDetectionStrategy.OnPush
})
export class ChildComponent extends BaseComponent {
  // your logic
}

的另一种方式是:为每个组件使用服务和本地提供程序:

代码语言:javascript
复制
@Injectable()
export class ActionService {
 constructor(){
   console.log('hello world');
 }
}

并将其(providers: [ActionService])注入必须具有此逻辑的组件,每个组件将具有此服务的单独实例:

代码语言:javascript
复制
@Component({
    selector: 'main-page',
    templateUrl: './main-page.component.html',
    styleUrls: ['./main-page.component.scss'],
    changeDetection: ChangeDetectionStrategy.OnPush,
    providers: [ActionService]
})
export class MainPageComponent {}

对我来说:第一个解决方案比每次提供服务要好得多,但这取决于您:)

票数 1
EN

Stack Overflow用户

发布于 2020-07-15 06:04:47

我建议您使用静态方法创建一个实用程序类。

假设每次初始化组件时都要打印hello world:

utility.ts:

代码语言:javascript
复制
class Utility {
    static printHelloWorld() {
        console.log("Hello world");
    }
}

在component.ts中:

首先,将实用程序类导入为:

代码语言:javascript
复制
import Utility from './path/to/utility/class';

然后,在ngOnInit方法中:

代码语言:javascript
复制
ngOnInit() {
   Utility.printHelloWorld();
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62908413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档