Angular2访问另一个组件方法,而无需使用@ViewChild加载其模板

时间:2016-08-05 13:07:37

标签: methods angular components viewchild

我正在尝试使用@ViewChild访问子组件方法,并且它可以工作,但我也被迫加载其模板,我不想这样做,因为这也会强制子组件{{1和其他要运行的系统函数。

我希望它们只在我在不同的场景中调用这个子组件时运行,但是我想在AppComponent中按需访问这些子自定义方法。

那我该怎么办?

这是一个描述问题的掠夺者:http://plnkr.co/edit/FT6GTJ8mmUnyFxJAPbGV

您可以看到仪表板test()函数被调用,这就是我想要的,但是,它的ngOnInit函数也被初始化,我不想要

OnInit, AfterViewInit

我虽然从AppComponent模板中删除template: <h1>AppComponent</h1><my-dashboard></my-dashboard>非常明显,但是没有加载仪表板模板,但是我得到的错误是仪表板本身没有定义(如果你删除{{1},你可以看到错误并且再次运行plunker)即使我通过import语句包含它。

我错过了什么?

修改------------------------------------------- -------------------------------------------------- --------------------

因此,最后,您必须使用一项服务来存储可重用的数据/功能,而不需要工作。

1 个答案:

答案 0 :(得分:2)

不完全确定您为什么会这样,但您可以尝试使用import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core'; import { DashboardComponent } from './dashboard.component'; @Component({ selector: 'my-app', template: ` <h1>AppComponent</h1> `, providers: [DashboardComponent] }) export class AppComponent implements OnInit { constructor(public dashboardComponent: DashboardComponent){} ngOnInit() { this.dashboardComponent.test(); } } 作为提供者。虽然我没有看到它会如何落在它下面,但是如果它看起来很愚蠢,但是它起作用,那就太愚蠢了,规则。

import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
import { DashboardComponent } from './dashboard.component';

@Component({
    selector: 'my-app',
    template: `
      <h1>AppComponent</h1>
    `
})

export class AppComponent implements OnInit {

  public dashboardComponent: DashboardComponent = new DashboardComponent();

    constructor(){}

    ngOnInit() {
        this.dashboardComponent.test();
    }
}

plnkr

我假设的另一种方式可能是简单地启动一个新的类实例,这会导致类似这样的事情:

{{1}}

plnkr

但我再也看不出你为什么要做这样的事情。 显然,您的组件中存在不应该存在的逻辑