目錄
雙向綁定大致可以分成兩種類型:
總結:
首頁 web前端 js教程 帶你了解Angular10中的雙向綁定

帶你了解Angular10中的雙向綁定

Sep 15, 2021 am 10:48 AM
angular 雙向綁定

下面這篇文章帶大家了解雙向綁定,看看Angular中兩種類型的雙向綁定,希望對大家有幫助!

帶你了解Angular10中的雙向綁定

前面我們了解了屬性綁定、事件綁定、以及輸入和輸出的使用,是時候了解雙向綁定了。本節,我們將利用@Input()@Output()來了解下雙向綁定。 【相關教學推薦:《angular教學》】

#定義:雙向綁定為應用程式中的元件提供了一種共享資料的方式。使用雙向綁定綁定來偵聽事件並在父元件和子元件之間同步更新值。 (其實,也就是對@Input()@Output()的一種簡化)

雙向綁定大致可以分成兩種類型:

一、普通元件的雙向綁定

這個類型的雙向綁定可以發生在任何元件任何DOM元素上,下面我們透過一個實例來具體認識一下。

src/app/components/下面建立一個sizer元件作為子元件:

// src/app/components/sizer/sizer.component.html
<div>
  <button class="btn btn-danger" (click)="dec()" title="smaller">-</button>
  <button class="btn btn-primary" (click)="inc()" title="bigger">+</button>
  <label [style.font-size.px]="size">FontSize: {{size}}px</label>
</div>
// src/app/components/sizer/sizer.component.ts
...
export class SizerComponent implements OnInit {
  public size = 14;
  // ...
  dec() {
    this.size++;
  }
  inc() {
    this.size--;
  }
}
登入後複製

頁面將是這樣,且按鈕功能實現:

帶你了解Angular10中的雙向綁定

但是,這並不是我們想要的結果,我們需要從父元件傳入size,從而讓 sizer元件改變字體大小。並且,透過sizer元件的按鈕點選事件,將改變後的size的值回傳給父元件。

接下來我們將使用前面的知識來改造程式碼(也就是雙向綁定的原理介紹):

// src/app/app.component.html
// 下面的$event就是子组件传过来的值(必须是$event)
<app-sizer [size]="appFontSize" (onSizeChange)="appFontSize = $event"></app-sizer>
<div [style.font-size.px]="appFontSize">子组件修改后的FontSize: {{appFontSize}}</div>

// src/app/app.component.ts
...
export class AppComponent {
  appFontSize = 14;
}
登入後複製
// src/app/components/sizer/sizer.component.ts
...
export class SizerComponent implements OnInit {
  // 创建输入属性size,为number或字符串类型
  @Input() size: number | string;
  // 创建自定义事件onSizeChange,需要一个number类型的参数
  @Output() onSizeChange = new EventEmitter<number>();
  ....
  dec() {
    this.resize(-1);
  }
  inc() {
    this.resize(1);
  }
  resize(step: number) {
    // 设置字体大小为12~40之间的值
    this.size = Math.min(40, Math.max(12, +this.size + step));
    // 通过事件传值
    this.onSizeChange.emit(this.size);
  }
}
登入後複製

同樣實現了我們想要的效果:

帶你了解Angular10中的雙向綁定
但是,這樣是不是太麻煩了一點呢?下面,我們的雙向綁定正式出場:

Angular 的雙向綁定語法是方括號和圓括號的組合 [()][] 進行屬性綁定,() 進行事件綁定。修改下面程式碼:

// src/app/app.component.html
<app-sizer [(size)]="appFontSize"></app-sizer>
<div [style.font-size.px]="appFontSize">子组件修改后的FontSize: {{appFontSize}}</div>
登入後複製
// src/app/components/sizer/sizer.component.ts
...
export class SizerComponent implements OnInit {
  @Input() size: number | string;
  // 修改事件名,********必须是:属性名 + Change 形式*********
  @Output() sizeChange = new EventEmitter<number>();
  ....
  resize(step: number) {
    this.size = Math.min(40, Math.max(12, +this.size + step));
    this.sizeChange.emit(this.size);
  }
}
登入後複製

會發現,功能沒有受影響。

二、表單中的雙向綁定[(ngModel)]

根據先前基本的雙向綁定知識,[(ngModel)]語法可拆解為:

#1.名為ngModel的輸入屬性

2.名為ngModelChange的輸出屬性

單獨使用表單元素

首先需要引入FormsModule這個內建模組:

// src/app/app.module.ts 
import {FormsModule} from &#39;@angular/forms&#39;;
...
@NgModule({
  // ...
  imports: [
    // ...
    FormsModule
  ],
  // ...
})
登入後複製

元件中使用:

<!-- src/app/app.component.html -->
<input type="text" [(ngModel)]="iptVal">
<p>input value is {{iptVal}}</p>
登入後複製

上面這行程式碼相當於:

<input [value]="iptVal" (input)="iptVal = $event.target.value" />
登入後複製

這其實很簡單的,類似vue裡面的寫法。

在標籤中使用

將程式碼放入<form>標籤內:

<!-- src/app/app.component.html -->
<form>
  <input type="text" [(ngModel)]="iptVal2">
  <p>form 中input value is {{iptVal2}}</p>
</form>
登入後複製

但是,我們會發現瀏覽器會報錯:

帶你了解Angular10中的雙向綁定
# 報錯意思說,在form表單中使用ngModel的話,我們需要為input新增一個name屬性或設定[ngModelOptions]="{standalone: true}"

修改程式碼:

<!-- src/app/app.component.html -->
<form>
  <input type="text" [(ngModel)]="iptVal2" name="appIput2">
  <p>form 中input value is {{iptVal2}}</p>
</form>
登入後複製

或:

<!-- src/app/app.component.html -->
<form>
  <input type="text" [(ngModel)]="iptVal2" [ngModelOptions]="{standalone: true}">
  <p>form 中input value is {{iptVal2}}</p>
</form>
登入後複製

或:

<!-- src/app/app.component.html -->
<form>
  <input type="text" [(ngModel)]="iptVal2" [ngModelOptions]="{name: &#39;appIput2&#39;}">
  <p>form 中input value is {{iptVal2}}</p>
</form>
登入後複製

在表單元素中使用雙向綁定就是這麼簡單了,注意引入FormsModule模組就行。

總結:

1、雙向綁定的原理其實就是@Input()@ Output()結合使用,需要注意語法是[(屬性名稱)]=“父元件中一個屬性名稱”,先綁定輸入,再綁定輸出;

2、在form表單中使用雙向綁定,應先引入FormsModule這個內建模組,然後在input元素上添加name

更多程式相關知識,請造訪:程式設計學習! !

以上是帶你了解Angular10中的雙向綁定的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
聊聊Angular中的元資料(Metadata)和裝飾器(Decorator) 聊聊Angular中的元資料(Metadata)和裝飾器(Decorator) Feb 28, 2022 am 11:10 AM

這篇文章繼續Angular的學習,帶大家了解Angular中的元數據和裝飾器,簡單了解一下他們的用法,希望對大家有幫助!

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

淺析angular中怎麼使用monaco-editor 淺析angular中怎麼使用monaco-editor Oct 17, 2022 pm 08:04 PM

angular中怎麼使用monaco-editor?以下這篇文章記錄下最近的一次業務中用到的 m​​onaco-editor 在 angular 中的使用,希望對大家有幫助!

一文探究Angular中的服務端渲染(SSR) 一文探究Angular中的服務端渲染(SSR) Dec 27, 2022 pm 07:24 PM

你知道 Angular Universal 嗎?可以幫助網站提供更好的 SEO 支援哦!

Angular + NG-ZORRO快速開發一個後台系統 Angular + NG-ZORRO快速開發一個後台系統 Apr 21, 2022 am 10:45 AM

這篇文章跟大家分享一個Angular實戰,了解一下angualr 結合 ng-zorro 如何快速開發一個後台系統,希望對大家有幫助!

如何使用PHP和Angular進行前端開發 如何使用PHP和Angular進行前端開發 May 11, 2023 pm 04:04 PM

隨著網路的快速發展,前端開發技術也不斷改進與迭代。 PHP和Angular是兩種廣泛應用於前端開發的技術。 PHP是一種伺服器端腳本語言,可以處理表單、產生動態頁面和管理存取權限等任務。而Angular是一種JavaScript的框架,可以用來開發單一頁面應用程式和建構元件化的網頁應用程式。本篇文章將介紹如何使用PHP和Angular進行前端開發,以及如何將它們

angular學習之詳解狀態管理器NgRx angular學習之詳解狀態管理器NgRx May 25, 2022 am 11:01 AM

這篇文章帶大家深入了解angular的狀態管理器NgRx,介紹一下NgRx的使用方法,希望對大家有幫助!

使用Angular和Node進行基於令牌的身份驗證 使用Angular和Node進行基於令牌的身份驗證 Sep 01, 2023 pm 02:01 PM

身份驗證是任何網路應用程式中最重要的部分之一。本教程討論基於令牌的身份驗證系統以及它們與傳統登入系統的差異。在本教程結束時,您將看到一個用Angular和Node.js編寫的完整工作演示。傳統身份驗證系統在繼續基於令牌的身份驗證系統之前,讓我們先來看看傳統的身份驗證系統。使用者在登入表單中提供使用者名稱和密碼,然後點擊登入。發出請求後,透過查詢資料庫在後端驗證使用者。如果請求有效,則使用從資料庫中獲取的使用者資訊建立會話,然後在回應頭中傳回會話訊息,以便將會話ID儲存在瀏覽器中。提供用於存取應用程式中受

See all articles