我很困惑。何時在指令@Inputs和不指定時使用方括號[]?
看到這個簡單的指令:
@Directive({
selector: '[myDirective]'
})
export class MyDirective {
private text: string;
private enabled: boolean;
@Input() myDirective:string;
@Input('myText')
set myText(val: string) {
this.text = val;
}
@Input('myEnabled')
set myEnabled(val: boolean) {
this.enabled = val;
}
ngOnInit() {
console.log("myDirective string: " + this.myDirective);
console.log("myText string: " + this.text);
console.log("myEnabled boolean: " + this.enabled);
}
}
如果我的HTML看起來像這樣:
<div [myDirective]="myDefaultText" [myEnabled]="true" [myText]="abc"></div>
輸出將是:
myDirective string: myDefaultText real value // good
myEnabled boolean: true // good
myText string: undefined // Why?
如果我刪除[]從myText
:
<div [myDirective]="myDefaultText" [myEnabled]="true" myText="abc"></div>
輸出將是:
myDirective string: myDefaultText real value // good
myEnabled boolean: true // good
myText string: abc // GOOD
我也可以刪除myEnabled
的[]
,它也能工作。 所以這裏是我的困惑 - 當我需要使用方括號[]
,當沒有,當我想要使用myDirective
的用戶將永遠不需要懷疑是否如果不,我認爲方括號[]
應該總是在那裏。他們不是嗎?
我甚至都不認爲這就是實際發生的事情,你確定嗎?提問者提到'[myDirective] =「myDefaultText」給出了輸入「myDefaultText real ** value **」,雖然他的意思是myDefaultText的實際值,這意味着它仍然被當作一個表達式。 – Amit
我錯了。錯過了「真正的價值」。 –
在[本頁](https://angular.io/guide/template-syntax#one-time-string-initialization)上的當前的Angular 4文檔中介紹了這一點。 – 2Aguy