摘要:最近在項(xiàng)目里接手別人的代碼來(lái)做完善,其中一個(gè)是修復(fù)獲取不到地址的,仔細(xì)看了下代碼,發(fā)現(xiàn)需要用到控件。所以,演變成文件的數(shù)據(jù)如何跟組件通信。
最近在項(xiàng)目里接手別人的代碼來(lái)做完善,其中一個(gè)是修復(fù)獲取不到MAC地址的bug,仔細(xì)看了下代碼,發(fā)現(xiàn)需要用到Activex控件。
上一位同事在寫的時(shí)候把寫在index.html文件中,獲取mac地址的js代碼也寫在了index.html中,讀取完之后保存在localStorage里面,但是這里有個(gè)問(wèn)題,這個(gè)Activex控件獲取mac地址是一個(gè)異步操作,如果第一次獲取mac地址并且緩存沒(méi)有mac地址的信息,必定會(huì)報(bào)錯(cuò)。
這次修改的關(guān)鍵點(diǎn)就是如何將這個(gè)異步操作變成同步操作,或者當(dāng)控件獲取到mac之后傳播到組件里,組件再做相對(duì)應(yīng)的動(dòng)作。
所以,演變成index.html文件的數(shù)據(jù)如何跟組件通信。
既然找到關(guān)鍵點(diǎn),那么就來(lái)解決問(wèn)題吧!
我們都知道vue組件里通信有幾個(gè)辦法:
子 -> 父組件通信:子組件$on,父組件$emit;
父 -> 子組件通信:子組件定義props,父組件使用子組件時(shí)通過(guò)props向子組件傳值;
兄弟組件或者平行組件:定義一個(gè)eventBus,引入eventBus,通過(guò)eventBus的$on和$emit來(lái)通信;
如果項(xiàng)目比較大,推薦使用vuex來(lái)通信。
上面的方法,在index.html中貌似都用不上...除非將它們綁在window對(duì)象上...
所以變通一下,
在main.js文件中:window.eventBus = new Vue();
接下來(lái)我們?cè)趇ndex.html中的script標(biāo)簽打印下eventBus:
很好,能打印出來(lái)就行。
index.html文件,在body標(biāo)簽里插入:script代碼:
vue組件里的方法:
clickPort() { var userAgent = navigator.userAgent; if (userAgent.indexOf(".NET") > -1 && userAgent.indexOf("NT 10.0") > -1) { var service = locator.ConnectServer(); // eslint-disable-line service.Security_.ImpersonationLevel = 3; service.InstancesOfAsync(foo, "Win32_NetworkAdapterConfiguration"); // eslint-disable-line } eventBus.$off("getMac"); // 關(guān)閉上一次的監(jiān)聽(tīng) eventBus.$on("getMac", (_mac) => { alert(`獲取MAC地址:${_mac}`); this.msg = _mac; }); }
ok,來(lái)執(zhí)行一把:
成功!
以上是第一種方法,利用的是eventBus,記住在使用eventBus的時(shí)候,記得關(guān)閉上一次的監(jiān)聽(tīng)
下面是第二種方法:怎么在index.html中給組件賦值呢?或者說(shuō)怎么調(diào)用組件里的方法呢?
利用同樣的原理,將this綁定到window上就可以了。
上代碼,
組件:clickPort() { var userAgent = navigator.userAgent; window.thisComponent = this; // 將組件實(shí)例賦予一個(gè)全局變量 if (userAgent.indexOf(".NET") > -1 && userAgent.indexOf("NT 10.0") > -1) { var service = locator.ConnectServer(); // eslint-disable-line service.Security_.ImpersonationLevel = 3; service.InstancesOfAsync(foo, "Win32_NetworkAdapterConfiguration"); // eslint-disable-line } }index.html:
運(yùn)行一把:
沒(méi)毛病,并且直接在模板里展示出來(lái);
使用第二種方法,需要在組件的data函數(shù)中初始化sMacAddr字段,否則不會(huì)在模板中展示出來(lái),并且在index.html文件中window.thisComponent.sMacAddr,這里的sMacAddr字段必須跟組件里初始化的字段一致
總結(jié):
在這無(wú)論用哪個(gè)方法,都得利用到window這個(gè)對(duì)象;這個(gè)也是沒(méi)辦法的事,其實(shí)利用同樣的道理,也是直接綁定在VUE的實(shí)例上;
條條大路通羅馬,小弟獻(xiàn)上一點(diǎn)技巧。
文章參考:https://blog.csdn.net/zyw_anq...
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注出處!https://segmentfault.com/a/11...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103957.html
摘要:一父組件通過(guò)的方式向子組件傳遞數(shù)據(jù),而通過(guò)子組件可以向父組件通信。而且只讀,不可被修改,所有修改都會(huì)失效并警告。 之前寫了一篇關(guān)于vue面試總結(jié)的文章, 有不少網(wǎng)友提出組件之間通信方式還有很多, 這篇文章便是專門總結(jié)組件之間通信的 vue是數(shù)據(jù)驅(qū)動(dòng)視圖更新的框架, 所以對(duì)于vue來(lái)說(shuō)組件間的數(shù)據(jù)通信非常重要,那么組件之間如何進(jìn)行數(shù)據(jù)通信的呢?首先我們需要知道在vue中組件之間存在什么樣...
摘要:雖然計(jì)算屬性在大多數(shù)情況下更合適,但有時(shí)也需要一個(gè)自定義的偵聽(tīng)器,當(dāng)需要在數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作時(shí),通過(guò)偵聽(tīng)器最有用。路由的鉤子函數(shù)首頁(yè)可以控制導(dǎo)航跳轉(zhuǎn),,等,一般用于頁(yè)面的修改。 談?wù)勀銓?duì)MVVM開發(fā)模式的理解 MVVM分為Model、View、ViewModel三者。Model 代表數(shù)據(jù)模型,數(shù)據(jù)和業(yè)務(wù)邏輯都在Model層中定義;View 代表UI視圖,負(fù)責(zé)數(shù)據(jù)的展示;...
摘要:當(dāng)一個(gè)組件沒(méi)有聲明任何時(shí),這里會(huì)包含所有父作用域的綁定和除外,并且可以通過(guò)傳入內(nèi)部組件在創(chuàng)建高級(jí)別的組件時(shí)非常有用。 寫在前面 組件間的通信是是實(shí)際開發(fā)中非常常用的一環(huán),如何使用對(duì)項(xiàng)目整體設(shè)計(jì)、開發(fā)、規(guī)范都有很實(shí)際的的作用,我在項(xiàng)目開發(fā)中對(duì)此深有體會(huì),總結(jié)下vue組件間通信的幾種方式,討論下各自的使用場(chǎng)景 文章對(duì)相關(guān)場(chǎng)景預(yù)覽 父->子組件間的數(shù)據(jù)傳遞 子->父組件間的數(shù)據(jù)傳遞 兄弟...
摘要:,至此咱們的微信小程序的簡(jiǎn)單使用及了解算是分享完了,畢竟個(gè)人也是道行有限,沒(méi)有鉆研太深,這些只是本人在實(shí)際項(xiàng)目開發(fā)過(guò)程中用到和總結(jié)的經(jīng)驗(yàn),有太多不足或不對(duì)的地方,希望大家多多給予指出與改正,咱們一起來(lái)共同學(xué)習(xí)與進(jìn)步 微信小程序是一種不需要下載安裝即可使用的應(yīng)用,在國(guó)內(nèi)它在企業(yè)推廣中的受歡迎度以及就這兩年的使用及普及熱度,然而就是因?yàn)樗膫涫軞g迎度以及越來(lái)越被企業(yè)所重視,也就形成了咱們開...
摘要:,至此咱們的微信小程序的簡(jiǎn)單使用及了解算是分享完了,畢竟個(gè)人也是道行有限,沒(méi)有鉆研太深,這些只是本人在實(shí)際項(xiàng)目開發(fā)過(guò)程中用到和總結(jié)的經(jīng)驗(yàn),有太多不足或不對(duì)的地方,希望大家多多給予指出與改正,咱們一起來(lái)共同學(xué)習(xí)與進(jìn)步 微信小程序是一種不需要下載安裝即可使用的應(yīng)用,在國(guó)內(nèi)它在企業(yè)推廣中的受歡迎度以及就這兩年的使用及普及熱度,然而就是因?yàn)樗膫涫軞g迎度以及越來(lái)越被企業(yè)所重視,也就形成了咱們開...
閱讀 4634·2021-09-26 09:55
閱讀 1373·2019-12-27 12:16
閱讀 891·2019-08-30 15:56
閱讀 1909·2019-08-30 14:05
閱讀 999·2019-08-30 13:05
閱讀 1273·2019-08-30 10:59
閱讀 1450·2019-08-26 16:19
閱讀 1891·2019-08-26 13:47