【发布时间】:2016-08-10 11:22:10
【问题描述】:
我在 Angular 2 中创建了一个指令,在这个指令中我必须访问 Component。为此,我使用了ViewChild(这种方法在普通组件中有效,但在指令上下文中无效。
这是我的指令:
import {Component, ViewChild} from "@angular/core";
import {NavController, NavParams} from "ionic-angular";
import {IONIC_DIRECTIVES} from "ionic-angular";
import {ComponentBase} from "../../component.base";
@Component({
selector: "header-content",
directives: [IONIC_DIRECTIVES],
templateUrl: "build/pages/components/header-content/header.content.html"
})
export class HeaderContentComponent {
@ViewChild(Component) protected component;
constructor() {
console.log(this.component.type);
}
}
在console.log 中出现以下异常:
异常:TypeError:无法读取未定义的属性“类型”
如何从我的指令中访问Component?
编辑:
不幸的是我在这里粘贴了错误的代码,但仍然是同样的问题。
我需要得到Content,而不是前面提到的Component。
所以这里是代码。 Content 仍未定义:
import {Component, ViewChild} from "@angular/core";
import {NavController, NavParams, Content} from "ionic-angular";
import {IONIC_DIRECTIVES} from "ionic-angular";
import {ComponentBase} from "../../component.base";
@Component({
selector: "header-content",
directives: [IONIC_DIRECTIVES],
templateUrl: "build/pages/components/header-content/header.content.html"
})
export class HeaderContentComponent {
@ViewChild(Content) protected content: Content;
public toolbarActive: boolean = false;
public toggleToolbar() {
this.toolbarActive = !this.toolbarActive;
if (this.toolbarActive) {
// this.content.removeCssClass("no-scroll");
// this.content.addCssClass("scroll");
} else {
// this.content.removeCssClass("scroll");
// this.content.addCssClass("no-scroll");
}
// this.content.resize();
}
protected ngAfterViewInit() {
console.log(this.content);
}
}
编辑:
我用代码创建了一个 Plunker,检查控制台你会看到 undefined
https://plnkr.co/edit/ayFskPyDRlpYDkMEapDL?p=preview
编辑:
接受下面的答案后(它适用于 Plunker),但它不适用于我的 Visual Studio。我收到以下错误:
提供的参数与调用目标的任何签名都不匹配
新Plunker:https://plnkr.co/edit/ayFskPyDRlpYDkMEapDL?p=preview
【问题讨论】:
-
嗨,你有没有弄明白这个?我希望能够从自定义组件中访问内容。如果我尝试使用
@Host(Content) private content: Content,我会遇到同样的打字错误
标签: angular typescript ionic2