我有点困惑。
请参阅这个简单的指令:
@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
我也可以删除[]
from myEnabled
它也会起作用。
所以这是我的困惑 - 当我需要使用方括号时[]
当没有时,虽然我想要将要使用的用户myDirective
永远不需要怀疑是否,我认为方括号[]
应该永远在那里。不是吗?
当你使用[]
绑定到@Input()
,它基本上是一个模板表达式。
同样的方式显示{{abc}}
不会显示任何内容(除非你实际上有一个名为abc
).
如果你有一个字符串@Input()
,并且你想将它绑定到一个常量字符串,你可以这样绑定它:[myText]=" 'some text' "
,或者简而言之,就像普通的 HTML 属性一样:myText="some text"
.
原因[myEnabled]="true"
工作是因为true
是一个有效的模板表达式,它的计算结果当然是布尔值true
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)