Polymer組件里根據(jù)property值來顯示不同的樣式

我們的組件有時(shí)候需要根據(jù)property的值來呈現(xiàn)不同效果。
例如當(dāng)isActive是true的時(shí)候,使用active樣式。一個(gè)比較傳統(tǒng)的方法是每當(dāng)isActive改變的時(shí)候添加/刪除active樣式:

/* css */

.active {
  color: yellow;
  background: black;
}
// js

properties {
  isActive: {
    type: Boolean,
    notify: true,
    observer: '_observeIsActive'
  }
},

_observeIsActive() {
  if (this.isActive) {
    this.classList.add('active');
  } else {
    this.classList.remove('active');
  }
}

實(shí)際上polymer能提供一個(gè)更方便的解決。

使用reflectToAttribute

詳細(xì)可查看文檔Reflecting properties to attributes

Polymer的property提供一個(gè)reflectToAttribute設(shè)置,來將property反射到元素的html(attribute)上。當(dāng)你的<my-element>isActivereflectToAttribute設(shè)置為true,而isActive的值也為true的時(shí)候,瀏覽器的DOM會(huì)變成這樣:

<my-element is-active></my-element>

通過這么個(gè)特性,我們就可以簡化上面的功能的實(shí)現(xiàn)了:

/* 直接去掉之前的.active,根據(jù)元素的attribute里是否包含'is-active'來顯示樣式 */
:host[is-active] {
  color: yellow;
  background: black;
}
properties {
  isActive: {
    type: Boolean,
    notify: true,
    // 不再需要observer,但需要將property反射到attribute上
    reflectToAttribute: true
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • layout: defaulttype: guideshortname: Docstitle: Registrat...
    1bdd9a4a74a2閱讀 658評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,948評(píng)論 18 139
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,633評(píng)論 0 4
  • 早啊,好久沒有起這么早了,努力回想起來上次起這么早還是在昨天。不光早安,還有元宵節(jié)快樂!團(tuán)團(tuán)圓圓吃湯圓(yuanx...
    徐彳亍閱讀 286評(píng)論 0 0
  • 不知不覺,對(duì)你的簡書,對(duì)你的微博,對(duì)你的朋友圈,對(duì)你的空間。對(duì)你的任何交際圈的下一條動(dòng)態(tài),都有了一種期待。
    Mr_Zoul閱讀 129評(píng)論 2 0