乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      10.組件實(shí)戰(zhàn)

       新進(jìn)小設(shè)計(jì) 2021-09-12

      上一篇主要介紹了組件的原理,這一篇主要是舉個(gè)例子,來(lái)說(shuō)明組件的應(yīng)用。

      案例

      1. 實(shí)現(xiàn)一個(gè)下拉刷新組件,當(dāng)用戶在某個(gè)區(qū)域?qū)⑹种笍纳厦嫱禄瑒?dòng),這個(gè)組件就會(huì)出現(xiàn),然后頁(yè)面執(zhí)行刷新操作。等刷新完,這個(gè)組件就會(huì)消失。

        • 我們定義一個(gè)對(duì)象,放在組件配置數(shù)組中,在需要用到的時(shí)候加載,在/public/index.js加入代碼

        • 在home.html中添加,對(duì)于組件獲取,只能通過(guò)id

        • 然后在/public/component文件夾中加入以下目錄文件

        • 在str-down-fresh.html加入如下代碼

        • 在str-down-fresh.js加入組件的邏輯代碼

        • 在home.js監(jiān)聽(tīng)loading事件,在10s后隱藏,如以下代碼

      2. 關(guān)于slot的例子,引入的a-btn標(biāo)簽,在home.html引入,slot的單元素直接用元素,如果是多元素替換slot,用template元素。

        • 引入組件配置

        • slot順序不代表渲染順序

        • 然后在/public/component文件夾中加入

        • 在a-btn.html加入如下代碼, 以這里的渲染順序?yàn)橹?/p>

        • 在a-btn.js加入如下代碼

      這里引入的都是單元素,如果組件定義多元素,也是符合的, 比如下面定義一個(gè)x-component, 如果只有一個(gè)slot,那么就可以不用定義name屬性,在html上定義的里面的內(nèi)容都是屬于slot的content
      在x-component.html定義

      <div class="x-component-style"></div>
      <div><slot></slot></div>
      <div></div>

      這里要注意:slot必須要將元素包圍起來(lái)。因?yàn)樯弦黄獙?duì)于組件的屬性nodes是從放在html就開(kāi)始定義的,而不是save的時(shí)候定義,因?yàn)樗鼪](méi)有parentDom,如果沒(méi)有包圍起來(lái),在執(zhí)行頁(yè)面restore的時(shí)候,會(huì)造成不可思議的bug。

      ui組件庫(kù)

      上述說(shuō)明了幾個(gè)Componnet的例子, 如果創(chuàng)建一個(gè)組件庫(kù)呢?統(tǒng)一組件的整體風(fēng)格是非常的重要的。這里我們按照google的material design創(chuàng)建了一個(gè)符合移動(dòng)端的組件庫(kù)。把它放在/public/ui的文件夾中,并把組件庫(kù)的的service文件strui.js放在services文件夾中,里面主要是定義一系列的組件信息。在使用的時(shí)候,在/public/script/index.js中引入strui服務(wù)

      App.require(["strui"], function (strui) {
          // 其它頁(yè)面配置信息
          strui.init(app, function () { // 初始化,主要是為了引入相關(guān)的樣式,是個(gè)異步的過(guò)程
              app.initialize(document.body);
          })
      })

      以下就是strui里面的簡(jiǎn)要代碼

      App.require(function () {
          var components = []; // 組件配置
          var popUps = []; // 彈窗配置, 下一篇詳解
          var layers = []; // 繼承于組件,應(yīng)用于canvas的組件,不做介紹
          var pages = []; // 頁(yè)面配置
          var services = [];
      
          App.prototype.showDialog = function () {} // App的附加方法群
          Page.prototype.showDialog = function () {} // Page的附加方法群
      
          // 全局的漣漪特效
          if ("ontouchstart" in window) {
              window.addEventListener("touchstart", touchstartHandler, false);
          } else {
              window.addEventListener("mousedown", touchstartHandler, false);
          }
      
          // 定義服務(wù)
          App.define("tdrui", {
              init: function (app, feeback) {
                  app.appendComponentConfig(components);
                  app.appendComponentConfig(layers);
                  app.appendPopUpConfig(popUps);
                  app.appendPageConfig(pages);
                  app.appendServiceConfig(services); // 不是放在services文件夾中的需要特別定義 
      
                  // 接下來(lái)移入css文件,主要是str.css,引入后執(zhí)行feeback
                  // 最后引入適配各個(gè)屏幕的str-xx.css
              }
          })
      })

      這樣子,就可以暢快的使用組件庫(kù)里面的組件了。
      strui組件庫(kù)是一個(gè)為了兼容現(xiàn)代瀏覽器的高性能全平臺(tái)ui組件庫(kù),目前正在開(kāi)發(fā)中,目前只有在移動(dòng)端進(jìn)行開(kāi)發(fā)項(xiàng)目,pc端還未兼容(正在開(kāi)發(fā)中)

      strui框架主要做了以下的事情:

      1. 定義全局化樣式,統(tǒng)一風(fēng)格;

      2. 里面使用了多個(gè)css文件,為了更好的適配移動(dòng)端以及pc端;

      3. 簡(jiǎn)化開(kāi)發(fā)流程,提高項(xiàng)目的質(zhì)量。

      使用組件的時(shí)機(jī)

      在這里,我們相當(dāng)于把組件的使用全介紹了,回到上一篇的開(kāi)頭,通過(guò)組件怎么讓業(yè)務(wù)和渲染層的代碼不混雜在一起呢?

      1. 我們要掌握數(shù)據(jù)的流向,對(duì)于組件來(lái)說(shuō),它是可以保存數(shù)據(jù)的,它的主要目標(biāo)是根據(jù)數(shù)據(jù)渲染不同的界面,它應(yīng)該是和業(yè)務(wù)無(wú)關(guān)的;

      2. 對(duì)于Page對(duì)象來(lái)說(shuō),它是控制數(shù)據(jù)的流向,如果需要獲取數(shù)據(jù),可以從后端獲取,可以從組件里面獲取,也可以給組件賦值,更改組件的狀態(tài)。同時(shí)它也是處理業(yè)務(wù)的主要場(chǎng)地,通過(guò)監(jiān)聽(tīng)組件和dom的事件,進(jìn)行業(yè)務(wù)處理;

      3. 有時(shí)候組件是一次性的,僅僅針對(duì)于單個(gè)Page對(duì)象,把它抽象出來(lái)還是有很大的意義的。它可以更好的分離頁(yè)面各種功能,讓它們各司其職。在下一次更改的時(shí)候,只需要更改部分組件和它的數(shù)據(jù)流行就可以很好的解決;

      4. 對(duì)于組件我們應(yīng)該是可以精細(xì)控制的,雖然開(kāi)發(fā)的時(shí)候會(huì)耗費(fèi)點(diǎn)時(shí)間,對(duì)于要應(yīng)對(duì)復(fù)雜多變的業(yè)務(wù),也是非常必須的。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多