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

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

怎么在vue.js中實(shí)現(xiàn)一個(gè)只能輸入數(shù)字的輸入框-創(chuàng)新互聯(lián)

怎么在vue.js中實(shí)現(xiàn)一個(gè)只能輸入數(shù)字的輸入框?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的旅順口網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

代碼如下:




 
 Vue
 


 
 
 
 

如果頁面或是系統(tǒng)里有很多這樣的輸入框,這樣做,就不是很好了。每個(gè)數(shù)據(jù)都加一個(gè)監(jiān)聽器,然后某一天突然需求改了,可以輸入數(shù)字和字母了,那就要改得吐血了!而且這樣做,代碼也沒有可移植性,到了另一個(gè)系統(tǒng)里,還得重寫一遍,所以,就要寫一個(gè)通用的方法來實(shí)現(xiàn)這個(gè)需求。這個(gè)時(shí)候就要用到組件的功能,先新建一個(gè)js文件,我這里就叫num.js。然后num.js里面的代碼:

Vue.component('number', {
 template: '',
 data: function(){
 return {
 con: ''
 }
 },
 watch: {
 con: function(val){
 this.con = val.replace(/\D/g, '');
 }
 }
})

這樣就定義了一個(gè)組件number,組件里是一個(gè)輸入框,輸入框的內(nèi)容與數(shù)據(jù)con綁定,監(jiān)聽器控制con只能是數(shù)字。然后在html頁面里引入num.js,在頁面添加標(biāo)簽,在瀏覽器里,看到的就是一個(gè)輸入框,但是輸入框只能輸入數(shù)字。在頁面放置輸入框,是為了讓用戶輸入內(nèi)容,輸入的內(nèi)容是要給程序用的。那要怎么獲取輸入框的內(nèi)容?如果是用jquery的話,那就是通過dom來獲取,但vue的設(shè)計(jì)理念是dom和數(shù)據(jù)分離,通過dom來獲取就不合適,所以就要讓輸入框與一個(gè)數(shù)據(jù)綁定起來。

怎么在vue.js中實(shí)現(xiàn)一個(gè)只能輸入數(shù)字的輸入框

現(xiàn)在頁面有三個(gè)輸入框,三個(gè)輸入框的內(nèi)容要分別綁定到val1、val2、val3。該怎么弄?一開始,我的做法是在number標(biāo)簽上定義一個(gè)方法,組件里con的監(jiān)聽器監(jiān)聽到con值有改變時(shí),就調(diào)用這個(gè)方法,把con的值傳出來,而這個(gè)方法又會(huì)調(diào)用mydata里的一個(gè)方法,兩次傳遞,把值傳給對(duì)應(yīng)的val。這邏輯,聽著是不是感覺很繞。很繞都不怕,重要的是,別人用起來很不方便,需要自己到mydata里定義一個(gè)方法來賦值。所以后來就再改,輸入框的內(nèi)容不是要綁定一個(gè)數(shù)據(jù)嗎?那要綁定到哪個(gè)數(shù)據(jù),得告訴我吧,所以在number標(biāo)簽上,需要告訴我對(duì)象是哪個(gè),屬性名是哪個(gè),這樣,我就可以把輸入框的內(nèi)容綁定到這個(gè)對(duì)象的這個(gè)屬性上。在這里,對(duì)象就是mydata,屬性名就是val1、val2、val3。把對(duì)象傳進(jìn)去,傳的是字符串mydata,并不是一個(gè)對(duì)象,在組件里面,要怎么使用mydata這個(gè)對(duì)象?這個(gè)時(shí)候,就需要用到j(luò)s里非常強(qiáng)大的一個(gè)函數(shù)eval,eval函數(shù)接收一個(gè)字符串參數(shù),只能是字符串,然后函數(shù)會(huì)把這個(gè)字符串當(dāng)作js代碼來解析并執(zhí)行。代碼



 
 
 vue
 
 
 
 
 
 
 
 
 

第一個(gè)輸入框的內(nèi)容是: {{val1}}

 

第二個(gè)輸入框的內(nèi)容是: {{val2}}

 

第三個(gè)輸入框的內(nèi)容是: {{val3}}

 
     

num.js的代碼:

Vue.component('number', {
 props: ['objname', 'keys'],
 template: '',
 data: function(){
 return {
 con: ''
 }
 },
 watch: {
 con: function(val){
 this.con = val.replace(/\D/g, '');
 eval(this.objname+'[this.keys]=this.con');
 }
 },
})

運(yùn)行效果圖:

怎么在vue.js中實(shí)現(xiàn)一個(gè)只能輸入數(shù)字的輸入框

這樣,輸入框限制了只能輸入數(shù)字,也和數(shù)據(jù)綁字了,但這只是單向的綁字,輸入框的內(nèi)容改變了,外面的數(shù)據(jù)會(huì)跟著改變,但外面的數(shù)據(jù)改變了,輸入框的內(nèi)容不會(huì)跟著改變,所以,現(xiàn)在只是單向的綁定。在頁面下面再添加三個(gè)普通的輸入框,三個(gè)輸入框分別綁定val1、val2、val3

怎么在vue.js中實(shí)現(xiàn)一個(gè)只能輸入數(shù)字的輸入框

這個(gè)時(shí)候到頁面上操作就會(huì)發(fā)現(xiàn),上面的輸入框內(nèi)容改變會(huì)影響下面的,但下面的輸入框內(nèi)容改變了,就不會(huì)影響上面的輸入框的內(nèi)容

怎么在vue.js中實(shí)現(xiàn)一個(gè)只能輸入數(shù)字的輸入框

這個(gè)時(shí)候,要實(shí)現(xiàn)反向的綁定,那就需要在組件里為外面的數(shù)據(jù)添加監(jiān)聽器。有對(duì)象,有屬性名,為它加監(jiān)聽器,是可以加的,但是外面的屬性要綁定哪個(gè)組件里的輸入框呢?所以組件上要再添加一個(gè)屬性ref,這個(gè)ref是vue定義的一個(gè)屬性,用來找子組件的。這樣,代碼最終就變成


 
 
 
 

第一個(gè)輸入框的內(nèi)容是: {{val1}}

 

第二個(gè)輸入框的內(nèi)容是: {{val2}}

 

第三個(gè)輸入框的內(nèi)容是: {{val3}}

       

num.js里面

Vue.component('number', {
 props: ['objname', 'keys'],
 template: '',
 data: function(){
 return {
 con: ''
 }
 },
 mounted: function(){
 var self = this;
 window.addEventListener('load', function(){
 eval(self.objname+'.$watch(\''+self.keys+'\',function(val){this.$refs.'+self.keys+'.con=val})');
 })
 },
 watch: {
 con: function(val){
 this.con = val.replace(/\D/g, '');
 eval(this.objname+'[this.keys]=this.con');
 }
 },
})

這樣,數(shù)據(jù)就實(shí)現(xiàn)了雙向綁定。在mounted里面,addEventListener方法是有兼容問題的,IE8及以下版本沒有這個(gè)方法,我這里沒有做兼容處理。然后就是優(yōu)化,看代碼就發(fā)現(xiàn),在number標(biāo)簽上,ref和keys實(shí)際上是一樣的,可不可以只用一個(gè)?經(jīng)過實(shí)驗(yàn),在組件內(nèi)部獲取ref的值獲取不到,這個(gè)我還不知道怎么獲取,學(xué)得不夠深吶。然后就是objname可不可以不傳,不傳的話就默認(rèn)是組件的父對(duì)象,這個(gè)是可以實(shí)現(xiàn)的。最后,組件還可以進(jìn)行一些擴(kuò)展,比如再添加一個(gè)屬性mytype,mytype不傳則默認(rèn)輸入框只能輸入數(shù)字,如果為word,則輸入框只能輸入字母和數(shù)字,如果為chinses,則只能輸入中文漢字等。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司的支持。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


文章題目:怎么在vue.js中實(shí)現(xiàn)一個(gè)只能輸入數(shù)字的輸入框-創(chuàng)新互聯(lián)
文章路徑:http://weahome.cn/article/cshodd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部