<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Angular 2 ngModel 雙向綁定 ### 數據雙向綁定概括 ```html <input [value]="username" (input)="username = $event.target.value"> <p>Hello {{username}}!</p> ``` 說明: - `[value]="username"` - 綁定表達式`username`到輸入元素的`value`屬性上。 - `(input)="expression"` - 以聲明方式將輸入元素的`input`事件綁定表達式上。 - `username = $event.target.value` - `input`事件觸發后執行的表達式。 - `$event` - Angular暴露在元素中的事件綁定表達式,它代表了事件`event`對象。 注意:這種方式,如果沒有指定`username`的初始值,將在輸入框中顯示`undefined`。傳入`(input)`的`$event`類型為`InputEventObject` ### 理解ngModel `ngModel`實際上由**屬性綁定**和**事件綁定**兩部分構成。它的完整寫法如下: ```html <input [ngModel]="username" (ngModelChange)="username = $event"> <p>Hello {{username}}!</p> ``` 屬性綁定`[ngModel]`只關心如何更新當前DOM元素,事件綁定`(ngModelChange)`通知外部世界DOM值發生改變。為什么這里的`ngModelChange`接收的是`$event`,而不是像上面`$event.target.value`,原因在于Angular內部的`DefaultValueAccessor`做了一些處理。 最后,`username`和`ngModel`寫二次,顯得沒有必要,Angular允許我們直接使用簡寫方式`[()]`。 ### 創建自定義雙向綁定 ```html <custom-counter [(counter)]="someValue"></custom-counter> <p>counterValue = {{someValue}}</p> ``` ```typescript import { Component, Input, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'custom-counter', template: ` <button (click)="decrement()">-</button> <span>{{counter}}</span> <button (click)="increment()">+</button> ` }) export class CustomCounterComponent { counterValue = 0; @Output() counterChange = new EventEmitter(); @Input() get counter() { return this.counterValue; } set counter(val) { this.counterValue = val; this.counterChange.emit(this.counterValue); } decrement() { this.counter--; } increment() { this.counter++; } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看