這篇文章主要為大家展示了“Angular2+樣式綁定方式的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Angular2+樣式綁定方式的示例分析”這篇文章吧。
我們提供的服務有:成都網(wǎng)站制作、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、承留ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的承留網(wǎng)站制作公司
引言
開發(fā)ngx(angular 2+ 以后都直接稱為ngx
)也有1年半的時間了,剛開始開發(fā)的時候使用的還是angular2 RC版,現(xiàn)在已經(jīng)出angular5了,時光飛逝?。?/p>
ngx從設計之初就是一個component-based的框架,所以大到一個頁面,小到一個按鈕,都是一個component。
這就涉及到了組件的重用,設計通用組件的時候,必不可少的就是動態(tài)的樣式綁定。
回頭想想, angular還真是給我們提供了好幾種屬性綁定的方式呢。
接下來我們就來具體看看如果在組件中使用樣式綁定。
style binding
[style.propertyName]
我們有一個button,默認的樣式是bootstrap
的primary
,
假如在不同的頁面中按鈕的大小要不同,這個時候就需要動態(tài)綁定button的字體大小,可以使用[style.propertyName]
來實現(xiàn)。
template中代碼
<button class="btn btn-primary" [style.fontSize]="fontSize"> Style Binding </button>
Component類中代碼
private fontSize: string = "2em";
結果如圖:
假如我們還需要動態(tài)設置button的邊框半徑border-radius
,
template中代碼則變?yōu)椋?/p>
<button class="btn btn-primary" [style.fontSize]="fontSize" [style.borderRadius]="borderRadius"> Style Binding </button>
Component類中代碼則變?yōu)椋?/p>
private fontSize: string = "2em"; private borderRadius: string = "10px";
則結果變成:
使用[style.propertyName]來綁定樣式屬性固然不粗,可是一旦有新的需求,我們就需要繼續(xù)加上我們需要綁定的屬性, 這個時候組件上綁定的屬性就會越來越多,我們有沒有辦法來創(chuàng)建一個object
來存儲我們需要綁定的屬性呢? 當然有,[ngStyle]就可以幫我們來做這件事情。
[ngStyle]
所以上面的例子,我們就可以直接使用[ngStyle]
來動態(tài)綁定button的font-size
和border-radius
。
template中的代碼則變?yōu)椋?/p>
<button class="btn btn-primary" [ngStyle]="btnStyle" > Style Binding </button>
Component類的代碼則變?yōu)椋?/p>
private btnStyle: any = { borderRadius: "10px", fontSize: "2em" };
結果為:
[style.propertyName] vs. [ngStyle]
[style.propertyName]每次只能綁定一個屬性
而 [ngStyle] 則可以同時綁定多個屬性
當[style.propertyName] 和 [ngStyle] 綁定同一個屬性時,比如都需要動態(tài)修改font-size
, [style.propertyName]則會覆蓋[ngStyle]里面的同一屬性.
當然除了style binding, 我們還可以使用class binding來動態(tài)修改樣式。
class binding
[class.className]
使用這種方式,我們可以根據(jù)綁定變量的值來動態(tài)添加或者移除css class。
還是使用剛才button的例子。
則代碼變?yōu)椋?/p>
//template <button class="btn btn-primary" [class.btnBorder]="changeBorder" > Style Binding </button> //CSS .btnBorder { border-color: green; border-radius: 10px; } //Component Class private changeBorder: boolean = true;
結果如圖:
看著字體有點小啊,我們再動態(tài)添加一個改變字體的class:my
這個時候代碼就變?yōu)榱耍?/p>
//template <button class="btn btn-primary" [class.btnBorder]="changeBorder" [class.btnFont]="changeFont" > Style Binding </button> //CSS .btnBorder { border-color: green; border-radius: 10px; } .btnFont { font-size: 2em; font-weight: bold; } //Component Class private changeBorder: boolean = true; private changeFont: boolean = true;
結果如圖:
[ngClass]
像[ngStyle]一樣,angular也給我們提供了一個指令[ngClass]來動態(tài)綁定多個css class。
那么我們可以使用[ngClass]對上面的代碼重構一下
//template <button class="btn btn-primary" [ngClass]= "{'btnFont': changeFont, 'btnBorder': changeBorder}"> Style Binding </button> //CSS .btnBorder { border-color: green; border-radius: 10px; } .btnFont { font-size: 2em; font-weight: bold; } //Component Class private changeBorder: boolean = true; private changeFont: boolean = true;
結果依舊為:
[ngClass]需要綁定一個object,key是css類名, value是綁定的變量。
[class.className] vs. [ngClass]
[class.className]每次只能綁定一個CSS類。
而 [ngClass] 則可以同時綁定多個CSS類。
當[class.className] 和 [ngClass] 需要動態(tài)修改同一個樣式時,比如都需要動態(tài)修改font-size
, [class.className]則會覆蓋[ngClass]里面的統(tǒng)一樣式.
[className]
angular還提供一種綁定方式,就是直接通過修改元素的className
來動態(tài)改變樣式。
但我不推薦
這種使用方式,為什么不推薦? 看下面的例子
//template <button class="btn btn-primary" [className]="changedFont"> Style Binding </button> //CSS .btnBorder { border-color: green; border-radius: 10px; } .btnFont { font-size: 2em; font-weight: bold; } //Component Class private changedFont: string = "btnFont";
結果卻變成了這樣:
我們預先設置好的bootstrap的primary
被移除了, 就是因為[className]會添加動態(tài)綁定的類名,然后移除之前所有的類名。
所以這種綁定方式是很有危險性的,因為針對一個組件,我們通常都會有很多種類來共同控制樣式。
在通用組件中,非常不推薦使用[className]。
總結
最后再來總結下angular中各種樣式綁定的特點和區(qū)別:
[style.propertyName] 直接綁定一個string類型的樣式值,或者string類型的變量。優(yōu)先級最高,會覆蓋已有的樣式屬性。
[ngStyle]綁定一個樣式組合的object,key是css屬性名,value是對應的樣式值,或者string類型的變量。
[class.className] 直接綁定true/false, 或者boolean類型的變量。
[ngClass]綁定一個css類名組合的object,key是css類名,value是true/false 或者boolean類型的變量。
[className] 直接綁定css類名,或者string類型的變量。 (不推薦使用這種方式)
以上是“Angular2+樣式綁定方式的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞標題:Angular2+樣式綁定方式的示例分析
網(wǎng)站鏈接:http://www.rwnh.cn/article42/pgedhc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設計公司、用戶體驗、、網(wǎng)站導航、網(wǎng)站收錄、網(wǎng)站設計公司
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)