21

有人可以建议我如何读取/绑定属性值到@component 类,这在 ngOnInit 方法中似乎是未定义的?

这是一个 plunker 演示: http ://plnkr.co/edit/4FoFNBFsOEvvOkyfn0lw?p=preview

我想阅读“someattribute”属性的值

<my-app [someattribute]="'somevalue'">

在 App 类 (src/app.ts) ngOninit 方法中。

谢谢!

4

3 回答 3

26

您会注意到此类参数不能用于根组件。有关更多详细信息,请参阅此问题:

解决方法在于利用ElementRef类。它需要注入到您的主要组件中:

constructor(elm: ElementRef) {
  this.someattribute = elm.nativeElement.getAttribute('someattribute'); 
}

我们需要在 HTML 文件中以这种方式使用组件:

<my-app someattribute="somevalue"></my-app>
于 2016-02-25T13:00:07.520 回答
18

你应该使用@Input装饰器。

这是一个例子:

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

@Component({
    selector: 'user-menu',
    templateUrl: 'user-menu.component.html',
    styleUrls: ['user-menu.component.scss'],
})
export class UserMenuComponent {

    /**
     * userName Current username
     */
    @Input('userName') userName: string;

    constructor() {

    }
    sayMyName() {
        console.log('My name is', this.userName);
    }
}

并使用它

<user-menu userName="John Doe"></user-menu>
于 2016-10-14T13:39:32.517 回答
5

更新

根组件不支持输入作为您可以使用的解决方法

constructor(elementRef:ElementRef) {
  console.log(elementRef.nativeElement.getAttribute('someattribute');
}

另请参阅https://github.com/angular/angular/issues/1858

另请参阅固定Plunker

原来的

您需要使用

[property]="value" 

或者

property="{{value}}"

或者如果它是一个属性

[attr.property]="value" 

或者

attr.property="{{value}}"
于 2016-02-25T13:00:29.570 回答