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