我遇到了一個難題讓Angular 2組件在Angular 1應用程序中工作。我成功地使用ngUpgrade引導應用程序,並且我的組件按預期顯示,但是綁定有一些不可思議的地方。ng2組件屬性混淆
這裏的作爲內另一角1個指令中使用的部件的表示:
<stdbutton name="name-{{someId}}"
(click)="doSomething()"
[highlighted]="true"
[size]="small">Clicky</stdbutton>
[highlighted]
和[size]
都旨在被用作元件上的可選屬性。
正如你所看到的,我同時使用ng1和ng2風格的綁定。 ng1綁定工作正常 - 輸出HTML將有name="name-12345"
。古怪是在NG2綁定:
(click)
不執行事件處理程序[highlighted]
是一個奇怪的狀態[size]
永遠是不確定的
這裏的組件定義:
import {Component, Input} from '@angular/core';
@Component({
selector: 'stdbutton',
inputs: ['size', 'highlighted'],
template: `
<div [class]="buttonClass"
[ngClass]="{stdbuttonhighlighted: highlighted}">
<ng-content></ng-content>
</div>
`
})
export class StdButtonComponent {
@Input() size: any;
@Input() highlighted: boolean;
buttonClass: string;
constructor() {
this.buttonClass = 'stdbutton' + (this.size ? this.size : '');
console.log(this.highlighted);
console.log(this);
}
}
當我說[highlighted]
處於一個奇怪的狀態,這就是我的意思。看看構造函數中的兩個console.log
語句。現在,輸出:
stdbutton.component.ts:21 undefined
stdbutton.component.ts:22
StdButtonComponent {buttonClass: "stdbutton"}
buttonClass: "stdbutton"
highlighted: true
size: undefined
所以,從this.highlighted
到undefined
那張true
在兩個電話之間,以及this.size
仍然undefined
不管。
看到這個問題http://stackoverflow.com/questions/33561845/angular2-cannot-訪問輸入從我的控制器構造函數 – yurzui