我正在尝试使用@ViewChild访问子组件方法,并且它可以工作,但我也被迫加载其模板,我不想这样做,因为这也会强制子组件{{1和其他要运行的系统函数。
我希望它们只在我在不同的场景中调用这个子组件时运行,但是我想在AppComponent中按需访问这些子自定义方法。
那我该怎么办?
这是一个描述问题的掠夺者:http://plnkr.co/edit/FT6GTJ8mmUnyFxJAPbGV
您可以看到仪表板test()函数被调用,这就是我想要的,但是,它的ngOnInit函数也被初始化,我不想要。
OnInit, AfterViewInit
我虽然从AppComponent模板中删除template: <h1>AppComponent</h1><my-dashboard></my-dashboard>
非常明显,但是没有加载仪表板模板,但是我得到的错误是仪表板本身没有定义(如果你删除{{1},你可以看到错误并且再次运行plunker)即使我通过import语句包含它。
我错过了什么?
修改------------------------------------------- -------------------------------------------------- --------------------
因此,最后,您必须使用一项服务来存储可重用的数据/功能,而不需要工作。
答案 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();
}
}
我假设的另一种方式可能是简单地启动一个新的类实例,这会导致类似这样的事情:
{{1}}
但我再也看不出你为什么要做这样的事情。 显然,您的组件中存在不应该存在的逻辑