angular4 結構型指令 屬性型指令總結
屬性型指令 — 改變元素、元件或其它指令的外觀和行為的指令。 2.angular在標籤元素上發現我們自定義的屬性,先考慮是否為指令,如果為就例項化這個指令類,這就意味著我們在模板中引入這個指令,不用像服務一樣在建構函式裡聲明瞭,按我理解 元件 指令 管道 是處於同一等級的,這樣就不存在誰引入誰,直接拿來用就是了。 3.使用資料綁定向指令傳遞值 使用@input 向指令傳遞值, <p appHightlight highlightColor="yellow"
<p appHightlight [highlightColor]="'orange'">Highlighted in orange</p> 注意這二者的區別@input向指令輸入值的方式不同,多了個[ ]時orange也多了個‘ ’,因為不加orange會當成一個類的屬性 4.繫結到第二個屬性 可以直接寫在宿主裡<p [appHighlight]="color"defaultColor="violet">不過也需要通過@input來接值
但我們以前也曾經把模板HTML繫結到元件的屬性,而且從來沒有用過@Input。 差異何在?
差異在於信任度不同。 Angular把元件的模板看做從屬於該元件的。 元件和它的模板預設會相互信任。 這也就是意味著,元件自己的模板可以繫結到元件的任意屬性,無論是否使用了@Input裝飾器。
但元件或指令不應該盲目的信任其它元件或指令。 因此元件或指令的屬性預設是不能被繫結的
你可以根據屬性名在繫結中出現的位置來判定是否要加@Input。
當它出現在等號右側的模板表示式中時,它屬於模板所在的元件,不需要@Input裝飾器。(資料來源)
當它出現在等號左邊的方括號([ ])中時,該屬性屬於其它元件或指令,它必須帶有@Input 裝飾器。(因為angular操作的是dom的property 不是attribute 對不存在的dom屬性就不信任,所以有的不需要@input)
試用此原理分析下列範例:
src/app/app.component.html (color)
content_copy
<p [appHighlight]="color">Highlight me!</p>
color屬性位於右側的繫結表示式中,它屬於模板所在的元件。 該模板和元件相互信任。因此color不需要@Input裝飾器。
myHighlight屬性位於左側,它引用了MyHighlightDirective中一個帶別名的屬性,它不是模板所屬元件的一部分,因此存在信任問題。 所以,該屬性必須帶@Input裝飾器。 二 結構型指令 結構型指令的職責是HTML佈局。 它們塑造或重塑DOM的結構,比如新增、移除或維護這些元素。Angular會解開這個*語法糖,變成一個<ng-template>標記,包裹著宿主元素及其子元素 1.NgIf 大駝峰為類,小駝峰為它的屬性。 當我們隱藏掉一個元素時,元件的行為還在繼續 —— 它仍然附加在它所屬的DOM元素上, 它也仍在監聽事件。Angular會繼續檢查哪些能影響資料繫結的變更。 元件原本要做的那些事情仍在繼續。
雖然不可見,元件及其各級子元件仍然佔用著資源,而這些資源如果分配給別人可能會更有用。 在效能和記憶體方面的負擔相當可觀,響應度會降低,當然,從積極的一面看,重新顯示這個元素會非常快。 元件以前的狀態被保留著,並隨時可以顯示。 元件不用重新初始化 —— 該操作可能會比較昂貴。 這時候隱藏和顯示就成了正確的選擇。
但是,除非有非常強烈的理由來保留它們,否則我們更傾向於移除使用者看不見的那些DOM元素,並且使用NgIf這樣的結構型指令來收回用不到的資源。 *ngIf指令被移到了<ng-template>元素上。在那裡它變成了一個屬性繫結[ngIf]。
<div>上的其餘部分,包括它的class屬性在內,移到了內部的<ng-template>元素上。(只會顯示最終的結果) 2、ngfor <div *ngFor="let hero of heroes; let i=index; let odd=odd; trackBy: trackById" [class.odd]="odd"> ({{i}}) {{hero.name}}</div>(三種用法)
<ng-template ngFor let-hero [ngForOf]="heroes" let-i="index" let-odd="odd" [ngForTrackBy]="trackById"><div [class.odd]="odd">({{i}}) {{hero.name}}</div></ng-template> 3.ngswitch 為屬性型指令 ngswitchcase 為結構型指令 三 自定義結構型指令 ng-template 優先使用星號(*)語法
星號(*)語法比不帶語法糖的形式更加清晰。 如果找不到單一的元素來應用該指令,可以使用<ng-container>作為該指令的容器。
雖然很少有理由在模板中使用結構型指令的屬性形式和元素形式,但這些幕後知識仍然是很重要的,即:Angular會建立<ng-template>,還要了解它的工作原理。 當需要寫自 己的結構型指令時,我們就要使用<ng-template>,<ng-template>是一個 Angular 元素,用來渲染HTML。 它永遠不會直接顯示出來。 事實上,在渲染檢視之前,Angular 會把<ng-template>及其內容替換為一個註釋。自己寫一些標籤在ng-template時,不顯示當成註釋 四、<ng-container> 的救贖 另一個問題是:有些HTML元素需要所有的直屬下級都具有特定的型別。 比如,<select>元素要求直屬下級必須為<option>,那麼我們就沒辦法把這些選項包裝進<div>或<span>中。 <span *ngFor="let h of heroes">
<span *ngIf="showSad || h.emotion !== 'sad'">
<option [ngValue]="h">{{h.name}} ({{h.emotion}})</option>
</span>option為空結構指令的錯亂 Angular的<ng-container>是一個分組元素,但它不會汙染樣式或元素佈局,因為 Angular 壓根不會把它放進 DOM 中。 <ng-container *ngIf="hero">
<option [ngValue]="h">{{h.name}} ({{h.emotion}})</option>
</ng-container>解決一些標籤不顯示的問題 (select option) 雜項: 1. ElementRef是一個服務,它賦予我們通過它的nativeElement屬性直接訪問 DOM 元素的能力。 Renderer服務允許通過程式碼設定元素的樣式 [email protected]裝飾器引用屬性型指令的宿主元素 相當於addEventListene 當然,你可以通過標準的JavaScript方式手動給宿主 DOM 元素附加一個事件監聽器。 但這種方法至少有三個問題: 必須正確的書寫事件監聽器。當指令被銷燬的時候, 必須拆卸事件監聽器,否則會導致記憶體洩露。 必須直接和 DOM API 打交道,應該避免這樣做。 [email protected]取別名@Input('appHighlight') highlightColor: string; 4. 每個宿主元素上只能有一個結構型指令, 有一個簡單的解決方案:把*ngIf放在一個"容器"元素上,再包裝進 *ngFor 元素。 這個元素可以使用ng-container,以免引入一個新的HTML層級 5.使用TemplateRef取得<ng-template>的內容,並通過ViewContainerRef來訪問這個檢視容器。 總結: 結構型指令可以操縱 HTML 的元素佈局。
當沒有合適的容器元素時,可以使用<ng-container>對元素進行分組。
Angular 會把星號(*)語法解開成<ng-template>。
內建指令NgIf、NgFor和NgSwitch的工作原理。
微語法如何展開成<ng-template>。
寫了一個自定義結構型指令 —— UnlessDirective。 angular預設是單資料繫結 angularjs預設是雙資料繫結 。 屬性指令意味著標籤的左右都為元件的屬性 。
相關推薦
angular4 結構型指令 屬性型指令總結
屬性型指令總結 看了幾次官網的屬性指令文件,對一些關鍵的東西還是很混淆,學到的都是基於表面的使用,這裡是我把一些重要的東西給總結起來,方便自己看: 1.三種指令:元件 、結構型指令(ngif ngfor等)和屬性型指令 (所
Angular 指令(Directive)屬性型指令
Angular 指令(Directive)屬性型指令 在Angular中有三種指令型別 元件 :擁有模板的指令 結構型指令:通過新增或移除DOM來改變DOM佈局的指令 屬性型指令:改變元素,元件或其他指令的外觀和行為的指令 自
Angular 屬性型指令 directive
1.使用命令建立指令 ng g d yourDirectiveName 2.yourDirectiveName.directive.ts程式碼: import {Directive,ElementRef,HostListener,Input} from '@an
angular 建立一個簡單的屬性型指令 (動態獲取DOM元素size,對DOM樣式進行改變)
一. 在 Angular 中有三種類型的指令:1. 元件 — 擁有模板的指令2. 結構型指令 — 通過新增和移除 DOM 元素改變 DOM 佈局的指令3. 屬性型指令 — 改變元素、元件或其它指令的外觀和行為的指令。本章主要想介紹一下屬性型指令並建立一個簡單的屬性型指令,屬性
Angular2 之 屬性型指令
入手方式: 需求 – 先要弄清楚我們做什麼? 被使用方式 – 長什麼樣子?什麼場景被使用?怎麼被使用? 將每個特性寫成單元測試,然後寫程式碼,將這個單元的程式碼測試通過後,再進行下一個特性程式碼的單
膝上型電腦通過DOS指令開啟無線WiFi
具體步驟如下 首先,進入cmd指令模式。同時按住win鍵加R鍵,接著輸入cmd回車出現如圖所示的黑視窗 接著,我們需要了解幾段cmd指令 netsh wlan set hostednetwor
java中的數據類型和運算符的總結歸類。
等等 宋體 表示 參數 強制轉換 賦值運算 對象 強制 特點 首先學習java肯定先要了解java的發展史,以及java的特點,常見的dos命令,jdk的安裝,如何開發java程序等等一下概念行的東西,這裏面我都不一一說了。 今天這一章主要想總結一下java中的數據類型和運
Angular2-無法給元素的屬性做雙向綁定,除非這個屬性是指令或者組件
lec input bsp 操作 data hang 前綴 綁定 對象 呈現一個實體對象的DOM結構,這個DOM有個自定義屬性是需要動態賦值的,比如說 item.data 要綁到自定義屬性 data 上;你可能會這麽寫: data="{{item.data}}" ,但直
Linux 程序設計學習筆記----Linux下文件類型和屬性管理
腳本 types.h 沒有 oot 創建 jsb 文件 屬性 文件大小 轉載請註明出處:http://blog.csdn.net/suool/article/details/38318225 部分內容整理自網絡,在此感謝各位大神。 Linux文件類型和權限 數據表示
spring各種類型的屬性註入
spring bean 多種類型屬性註入spring test + Junit方式:pox.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
上傳文件結構體及類型對照
-a tex rdp process 結構體 for excel表 .sh XML { "data": { "file": { "name": "1.xlsx", "type": "applicati
節點類型及屬性 記錄
.com alt .cn es2017 記錄 分享 屬性 blog 技術 節點類型及屬性 記錄
字符串類型內建方法歸納總結
內建函數版本:python3.6在查看bulitins的內建函數時,對字符串的內建方法進行了分類總結。類別 方法描述示例查找string.find(sub, start=None, end=None)在指定的範圍內查找子串,找到則返回最小的index;未找到則返回-1mystr = ‘hello world
java遍歷實體類的屬性和數據類型以及屬性值
取值 .get 數組 所有 system blog ++ 實體bean lds 遍歷實體類的樹形和數據類型一級屬性值 /** * 遍歷實體類的屬性和數據類型以及屬性值 * @param model * @throws NoSuchMe
系統目錄結構 文件類型和ls、alias命令
linux5.1 系統目錄結構/bin 該目錄為軟鏈接,用戶二進制文件,包含二進制可執行文件,同/sbin、/usr/bin/、/usr/sbin/、/sbin一樣都是存放的常用命令/boot linux的引導加載程序文件,啟動相關的文件,grub相關的文件/dev 系統所有的設備及驅動文件/etc 配置文件
201671010139 徐楠 關於泛型程序設計的部分總結
未使用 提高 之前 spa () 錯誤 類型 容器 提取 泛型,簡單的說,就是指參數化類型的能力,在未使用泛型之前,如ArrayList類,其中可以存放任意類型的對象,其方法大部分的參數類型都是Object類型,而實際中,我們常常僅需要存儲一種類類型,如String類型,以
C++標準庫vector類型的使用和操作總結
種類 style 開始 spa log string string類 gpo targe vector是一種類型對象的集合,它是一種順序容器,容器中的所有對象必須都是同一種類型。vector的對象是可以動態生長的,這說明它在初始化時可以不用指定大小,而是再使用時根據元素
spring註入對象類型的屬性
ops 16px dao beans oot 英語 value 類屬性 color 一.1.創建service類和Dao類 (1)在service中得到dao對象 2.具體實現過程 (1)在service裏邊把dao作為類型屬性 (2)生成dao類型屬性的set方法 pu
python沈澱之路~~整型的屬性
tuple 結果 color 用法 知識 進制 轉換成整型 16進制 length python的基礎知識: 基本數據類型:int str list tuple dict bool 一、整型的屬性功能 1、工廠方法將字符串轉換成整型 1 a = "12
Hibernate 映射枚舉(Enum) 類型的屬性
Hibernate在數據庫中我們一般用整數或字符串來表示枚舉值(有些數據庫(如 MySQL)本身帶有枚舉類型), 而在使用 Hibernate 時實體對象中也用 Integer 或 String 來表示枚舉就不那麽友好了。試想來我們這樣定義實體對象的兩個屬性@Entitypublic class User {