angular6 填坑之sdk的方法
网络编程 2021-07-04 15:50www.168986.cn编程入门
这篇文章主要介绍了angular6 填坑之sdk的方法,长沙网络推广觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随长沙网络推广过来看看吧
技术背景angular + ant zorro
最为大型前端团队首选的前端技术框架,angular,在国内多少还是有些水土不服。本人将针对angular做个一系列的填坑分享。
坑一sdk
angular的sdk不属于各个模块,直接挂载在body狼蚁网站SEO优化, ant design直接使用sdk,导致任何的弹出层,如select,dropdown,picker等在弹出来的时候自动创建覆盖全局的sdk,需要点击sdk才能关闭已打开的下拉。
明显需要点击两次才能出现一个下拉是产品们不能接受的。
解决方案有两个,一个是修改底层源码,抛弃sdk,明显成本巨大,而且bug会层出不穷,考虑不周全,建议缺少前端架构组的团队就不用考虑了。
本人选择了一个方案,有点取巧,能快速解决问题。
步奏一
将sdk缩小至1x1px,让鼠标可以点击网页中任意地方。
.cdk-overlay-backdrop { width: 1px!important; height: 1px!important; }
步奏二监听document点击事件
document.addEventListener('click', (e) => { this.prepareHideModal(e); });
步奏三获取当前点击的select等的唯一标识
使用sdk的组件比较多,有的有唯一标识,没有的特殊处理
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; } } }
步奏四关闭已打开的下拉组件
为什么叫prepareHideModal,这是获取sign前的操作,先关闭再去获取点击下拉的sign
getSign方法在关闭后执行
prepareHideModal(e) { let doClose = true; if (window['globalSignType']) { this.hideAllmodal(); window['globalSignType'] = null; return; } // 如果有sign,关闭已打开的 if (this.sign) { let _sign = this.sign; // 判断某些情况下不关闭弹框 if (_sign == 'NZ-POPOVER') { // 解决没有特使标识时点击cdk本身不消失 for (const v of e['path']) { if (v.classList && v.classList.contains('cdk-overlay-container')) { doClose = false; } } } else { // 常规有指定sign时点击选择器自身时不消失 for (const v of e['path']) { if (v.classList && v.classList.contains(_sign)) { doClose = false; break; } } } doClose && this.hideModal(_sign); } this.getSign(e); }
步奏五最重要的关闭sdk,这边采用了最简单的,模拟sdk点击,完全使用sdk自己的方法
hideModal(sign) { let cdkDom = document.querySelectorAll('.cdk-overlay-backdrop.cdk-overlay-dark-backdrop.cdk-overlay-backdrop-showing'); let domLen = cdkDom.length; // 循环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; }
至此算是解决了使用skd组件需要点击两次的坑,会引起一个坑,当页面出现滚动条时,已打开的下来组件位置不会跟着滚动而去改变。这边会在一篇博客中解决
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南