ng-book札記——Angular工作方式

来源:https://www.cnblogs.com/kenwoo/archive/2018/04/01/8688245.html
-Advertisement-
Play Games

Angular應用由組件(Component)構成。它與AngularJS中的指令相似(directive)。 應用 一個Angular應用本質上是一個組件樹。在組件樹的頂層,最上級的組件即是應用本身。當啟動此應用時,瀏覽器將渲染這個頂層組件。 Angular組件的重要特性是其可按照父子樹的結構自由 ...


Angular應用由組件(Component)構成。它與AngularJS中的指令相似(directive)。

應用

一個Angular應用本質上是一個組件樹。在組件樹的頂層,最上級的組件即是應用本身。當啟動此應用時,瀏覽器將渲染這個頂層組件。
Angular組件的重要特性是其可按照父子樹的結構自由組合,當每個組件渲染時,也會遞歸渲染其子組件。
假設有一個庫存管理的應用,如下圖所示:

在開始寫應用時,首先應該將其拆成三個組件。
標簽導航組件:

麵包屑導航組件:

產品列表組件:

再進一步拆分的話,產品列表由多個產品行構成。

而產品行又可以拆成產品圖片,產品所屬,價格顯示這件小組件。
所以最終應用的樹圖是這樣的:

組件

每個組件包含三部分:

  • 組件裝飾器(Component Decorator)
  • 視圖(View)
  • 控制器(Controller)

以最上層的應用組件為例,這個組件的代碼可能是這樣的:

@Component({
  selector: 'inventory-app-root',
  template: `
  <div class="inventory-app">
  (Products will go here soon)
  </div>
  `
 })
export class AppComponent {

}

@Component就是組件裝飾器,它為AppComponent類添加元數據。
上例的@Component裝飾器指定了選擇器(selector)——告訴Angular匹配何種元素(element),以及模板(template)——定義了視圖。
模板內容可以置於其它的文件中,這時需要使用templateUrl替代template。

@Component({
  selector: 'inventory-app-root',
  templateUrl: './app.component.html'
})
export class AppComponent {

}

組件控制器通過類(class)來定義,上例的AppComponent類即是控制器。
假設要在AppComponent組件對應的視圖中顯示產品的信息,可以通過模板綁定的方式達成此目的。

<div class="inventory-app">
  <h1>{{ product.name }}</h1>
  <span>{{ product.sku }}</span>
</div>

{{ … }}語法被稱為模板綁定,它會告訴視圖使用模板中的特定數據。
組件中的核心特性之一是輸入(input)與輸出(output)。

<div class="inventory-app">
  <products-list
  [productList]="products"
  (onProductSelected)="productWasSelected($event)">
  </products-list>
</div>

方括弧傳送輸入,圓括弧處理輸出。
藉由輸入綁定數據進入組件,通過輸出綁定事件流出組件。
在Angular中,父組件通過輸入傳送數據給子組件,而子組件則通過輸出傳送數據給父組件。
需要接收數據的子組件要由@Input()裝飾器指明對應的屬性。如下例:

import { Component, Input } from '@angular/core';

@Component({
  selector: 'my-component',
})
class MyComponent {
  @Input() name: string;
  @Input() age: number;
}

而要讓父組件接收數據的子組件要使用@output()裝飾器。

@Component({
  selector: 'single-component',
  template: `
  <button (click)="liked()">Like it?</button>
  `
})
class SingleComponent {
  @Output() putRingOnIt: EventEmitter<string>;

  constructor() {
    this.putRingOnIt = new EventEmitter();
  }

  liked(): void {
    this.putRingOnIt.emit("oh oh oh");
  }
}

例子中的子組件需要完成三步操作,指定輸出屬性(使用@output()標註);創建EventEmitter對象並綁定到對應輸出屬性;當特定方法(比如liked())被調用時發出事件。

@Component({
  selector: 'club',
  template: `
  <div>
  <single-component
  (putRingOnIt)="ringWasPlaced($event)"
  ></single-component>
  </div>
  `
})
class ClubComponent {
  ringWasPlaced(message: string) {
    console.log(`Put your hands up: ${message}`);
  }
}

父組件中$event包含了由子組件傳回的數據。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實驗環境:CentOS 7.4 mysql軟體: mysql-boost-5.7.20.tar.gz 1.安裝編譯工具 yum -y install \ncurses \ncurses-devel \bison \cmake\gcc \gcc-c++ \make 2.解壓包 tar xf mysql ...
  • 一.delete誤刪 方法1:如果表結構沒有改變,直接閃回整個表,具體步驟: --首先需要表閃回許可權,開啟行移動功能 alter table 表名 enable row movement; --執行閃回恢復表數據到某個時間點 flashback table 表名 to timestamp to_ti ...
  • 創建觸發器 是特殊的存儲過程,自動執行,一般不要有返回值 類型: 1.後觸發器 (AFTER,FOR)先執行對應語句,後執行觸發器中的語句 2.前觸發器 並沒有真正的執行觸發語句(insert,update,delete),而是執行觸發後的語句 3.行級觸發器 (FOR EACH ROW) 在SQL ...
  • 如果你的應用需要一個持久的WiFi長連接,你可以通過設置應用的Info.plist文件中的UIRequiresPersistentWiFi配置項的Boolean值來達到目的。如果這個配置項的值為YES,操作系統會在你的應用啟動的時候打開一個WiFi連接,並且在你的應用運行期間一直保持這個連接處於打開 ...
  • 自定義封裝UITableView,更加簡潔高效,無需為了實現delegate增加膠水代碼,自帶下拉刷新上拉載入控制項 "項目倉庫地址" 如何開始 "項目技術特點" "安裝方法" "框架用法" 代碼結構 "GYTableBaseView.h" "GYTableViewController.h" "GYT ...
  • viewChild裝飾器。 父組件的模版和控制器里調用子組件的API。 1、創建一個子組件child1裡面只有一個greeting方法供父組件調用。 import { Component, OnInit } from '@angular/core'; @Component({ selector: ' ...
  • 一、什麼是計算屬性 模板內的表達式非常便利,但是設計它們的初衷是用於簡單運算的。在模板中放入太多的邏輯會讓模板過重且難以維護。例如: 這裡的表達式包含3個操作,並不是很清晰,所以遇到複雜邏輯時應該使用Vue特帶的計算屬性computed來進行處理。 二、計算屬性的用法 在一個計算屬性里可以完成各種復 ...
  • 作用:通過給元素添加animation屬性,可以賦予該元素動畫效果。 <!DOCTYPE html><html> <head> <style> div{width:100px;height:100px;background:red;animation:my 5s;} @keyframes my { ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...