何时在指令 @Inputs 中使用方括号 [ ],何时不使用?

2023-12-08

我有点困惑。

请参阅这个简单的指令:

 @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(使用前将#替换为@)

何时在指令 @Inputs 中使用方括号 [ ],何时不使用? 的相关文章

随机推荐