将变量传递给自定义组件

rpa*_*anm 33 typescript angular2-template angular2-components angular

我有自定义组件:

@Component({
    selector: 'my-custom-component',
    templateUrl: './my-custom-component.html',
    styleUrls: ['./my-custom-component.css']
})
export class MyCustomComponent {
    constructor() {
        console.log('myCustomComponent');
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用它:

<my-custom-component></my-custom-component>
Run Code Online (Sandbox Code Playgroud)

但我怎么能传递一个变量呢?例如:

<my-custom-component custom-title="My Title"></my-custom-component>
Run Code Online (Sandbox Code Playgroud)

并在我的组件代码中使用它?

Ste*_*ota 62

您需要向Input组件添加属性,然后使用属性绑定将值传递给它:

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

@Component({
    selector: 'my-custom-component',
    templateUrl: './my-custom-component.html',
    styleUrls: ['./my-custom-component.css']
})
export class MyCustomComponent {

    @Input()
    customTitle: string;

    constructor() {
        console.log('myCustomComponent');
    }

    ngOnInit() {
        console.log(this.customTitle);
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的模板中:

<my-custom-component [customTitle]="yourVariable"></my-custom-component>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看此页面.

  • 这项工作!知道为什么`customTitle`变量在`constructor()`中是未定义的? (3认同)
  • @rpayanm它是'undefined`,因为`Input`是Angular的装饰器,dit"生活"通过Angular的生命周期,因此它只在`OnInit`中可用,之后(`constructor`与Angular没有任何关系,它在之前被初始化`OnInit`).您可以在此处阅读有关Angular生命周期钩子的更多信息:https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html (3认同)
  • 为什么customTitle可能是“未定义的”?因为我收到了 (2认同)

Gar*_*son 8

您可以将@Input()装饰器添加到组件的属性中.

export class MyCustomComponent {
    constructor() {
        console.log('myCustomComponent');
    }

    @Input() title: string;
}


<my-custom-component title="My Title"></my-custom-component>
Run Code Online (Sandbox Code Playgroud)

或来自变量'theTitle'的绑定标题

<my-custom-component [title]="theTitle"></my-custom-component>
Run Code Online (Sandbox Code Playgroud)

请参阅@Input()装饰器文档.

  • 顺便说一句,您的 `@Input` 元素可能需要声明为 `public` 才能正常工作。 (2认同)