真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

angular6中sdk的示例分析

這篇文章主要為大家展示了“angular6中sdk的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“angular6中sdk的示例分析”這篇文章吧。

成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。成都創(chuàng)新互聯(lián)公司為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,成都創(chuàng)新互聯(lián)公司核心團(tuán)隊十年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

坑一:sdk

angular的sdk不屬于各個模塊,直接掛載在body下面, ant design直接使用sdk,導(dǎo)致任何的彈出層,如select,dropdown,picker等在彈出來的時候自動創(chuàng)建覆蓋全局的sdk,需要點擊sdk才能關(guān)閉已打開的下拉。

明顯需要點擊兩次才能出現(xiàn)一個下拉是產(chǎn)品們不能接受的。

解決方案有兩個,一個是修改底層源碼,拋棄sdk,明顯成本巨大,而且bug會層出不窮,考慮不周全,建議缺少前端架構(gòu)組的團(tuán)隊就不用考慮了。

本人選擇了另外一個方案,有點取巧,但是能快速解決問題。

angular6中sdk的示例分析

步奏一:

將sdk縮小至1x1px,讓鼠標(biāo)可以點擊網(wǎng)頁中任意地方。

.cdk-overlay-backdrop {

  width: 1px!important;

  height: 1px!important;

}

步奏二:監(jiān)聽document點擊事件

document.addEventListener('click', (e) => {
  this.prepareHideModal(e);

});

步奏三:獲取當(dāng)前點擊的select等的唯一標(biāo)識

使用sdk的組件比較多,有的有唯一標(biāo)識,沒有的特殊處理

getSign(e) {

    for (const v of e['path']) {

      if (v.tagName == 'NZ-SELECT' || v.tagName == 'APP-SUBJECTPICKER') {

        // 下拉框獲取sign

        if (v.classList[0].includes('ng-tns-')) {

          this.sign = v.classList[0];

        } else {

          this.sign = v.classList[1];

        }

        this.signType = 'NZ-NORMAL';

        break;

      } else if (v.tagName == 'NZ-PICKER') {

        // picker 獲取sign

        this.sign = v.classList[0];

        this.signType = 'NZ-PICKER';

        break;

      }

      // popover 獲取sign

      if (v.getAttributeNode && v.getAttributeNode('nz-popover') && v.getAttribute('nz-popover') == '') {

        this.sign = 'NZ-POPOVER';

        this.signType = 'NZ-POPOVER';

        break;

      }

    }

  }

步奏四:關(guān)閉已打開的下拉組件

為什么叫prepareHideModal,這是獲取sign前的操作,先關(guān)閉再去獲取點擊下拉的sign

getSign方法在關(guān)閉后執(zhí)行

prepareHideModal(e) {

    let doClose = true;

    if (window['globalSignType']) {

      this.hideAllmodal();

      window['globalSignType'] = null;

      return;

    }

    // 如果有sign,關(guān)閉已打開的

    if (this.sign) {

      let _sign = this.sign;

      // 判斷某些情況下不關(guān)閉彈框

      if (_sign == 'NZ-POPOVER') {

        // 解決沒有特使標(biāo)識時點擊cdk本身不消失

        for (const v of e['path']) {

          if (v.classList && v.classList.contains('cdk-overlay-container')) {

            doClose = false;

          }

        }

      } else {

        // 常規(guī)有指定sign時點擊選擇器自身時不消失

        for (const v of e['path']) {

          if (v.classList && v.classList.contains(_sign)) {

            doClose = false;

            break;

          }

 

        }

      }

      doClose && this.hideModal(_sign);

    }

    this.getSign(e);

  }

步奏五:最重要的關(guān)閉sdk,這邊采用了最簡單的,模擬sdk點擊,完全使用sdk自己的方法

hideModal(sign) {

    let cdkDom = document.querySelectorAll('.cdk-overlay-backdrop.cdk-overlay-dark-backdrop.cdk-overlay-backdrop-showing');

    let domLen = cdkDom.length;

    // 循環(huán)cdk,找到它自身的cdk,模擬點擊隱藏

    for (var i = 0; i < domLen; i++) {

      var v = cdkDom[i];

      if (v['style'].display != 'none') {

        v['click']();

        break;

      }

    }

    this.sign = null;

    this.signType = null;

  }

以上是“angular6中sdk的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


文章標(biāo)題:angular6中sdk的示例分析
文章地址:http://weahome.cn/article/gggsei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部