为什么设计决定使用不同的括号?

gaz*_*i86 5 javascript typescript angular

我刚开始学习Angular2,并想知道为什么开发人员决定在html中使用各种不同的包装器?例如:

[(ngModel)]="some.property"

(click)="someMethod()"

[src]="some.property"
Run Code Online (Sandbox Code Playgroud)

我确信它背后有一个很好的逻辑原因,我知道它们被用于不同的目的,但乍一看它似乎不一致,是一个不必要的障碍需要克服.

Sur*_*yan 7

每种语法都有自己的目标.

1)事件绑定

这是从内部外部组件的单向绑定.被称为event.该外部部件将调用someMethodclick事件被从该内部部件触发,或从当前tag.

(click)="someMethod()"
Run Code Online (Sandbox Code Playgroud)

示例:这里button的click处理程序调用该onClickMe()函数

@Component({
  selector: 'click-me',
  template: `
    <button (click)="onClickMe()">Click me!</button>
    {{clickMessage}}`
})
export class ClickMeComponent {
  clickMessage = '';

  onClickMe() {
    this.clickMessage = 'You are my hero!';
  }
}
Run Code Online (Sandbox Code Playgroud)

2)单向数据绑定

这是从外部内部的单向绑定.这将传递some.propertysrc内部component或内部的属性tag.

[src]="some.property"
Run Code Online (Sandbox Code Playgroud)

例.在这里,我们绑定到innerText属性name属性

<h1 [innerText]="name"></h1>  
Run Code Online (Sandbox Code Playgroud)

要么

<h1>{{ name }}</h1>  
Run Code Online (Sandbox Code Playgroud)

3)双向数据绑定

而这是一个双向的结合反之亦然.这将做两件事.

[(ngModel)]="some.property"
Run Code Online (Sandbox Code Playgroud)

示例:这些input值将在更新时username更新.而且当我们在输入中键入另一个值时,username将会更新.所以在这里你得到双向数据绑定.在[(ngModel)]的引擎下,它创建了单向和事件绑定.这条线

<input [(ngModel)]="name">

<p>Hello {{ name }}!</p>
Run Code Online (Sandbox Code Playgroud)

等于

<input [value]="name" (input)="name = $event.target.value">

<p>Hello {{ name }}!</p>
Run Code Online (Sandbox Code Playgroud)

有了深入的知识,您可以在文档中查找