2016-09-20 3 views
0

В моем приложении Angular2 я должен вызвать скрипт после инициализации каждого компонента, когда представление доступно.Угловой 2 - Определите ngAfterViewInit для всех компонентов

Я ищу лучший способ определить глобальный обратный вызов «ngAfterViewInit» для всех компонентов. Я не могу написать это в каждом компоненте, потому что есть огромные изменения, которые кто-то в команде забыл.

Что я рассмотрел:

  • переопределение @Component, если это возможно
  • использование маршрутизации

Есть ли способ сделать это?

Спасибо за помощь!

+1

как насчет абстрактного класса? – kit

+0

Если вы просто боитесь, что кто-то забывает написать метод ngAfterViewInit, почему бы вам не написать единичный тест или крюк pre-commit, который проверяет это? – StephaneM

ответ

2

Вам необходимо создать абстрактный класс, а затем расширить все компоненты (классы) этого класса.

Что-то вроде:

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

export abstract class AbstractViewInit { 
    ngAfterViewInit() { 
    console.log('after View init'); 
    } 
} 

@Component({ 
    selector: 'child', 
    template: 'I am a child' 
}) 
export class ChildComponent extends AbstractViewInit {} 

@Component({ 
    selector: 'my-app', 
    template: '<h1>My First Angular 2 App</h1> <child></child>' 
}) 
export class AppComponent extends AbstractViewInit {} 

Работа plunker: http://plnkr.co/edit/Lmyes9vmUosGS5shvHqA?p=preview

+0

Спасибо! Кажется, это приемлемое решение. Также благодаря @kit, который предложил такое же решение – CyrilleGuimezanes

Смежные вопросы