当前位置: 首页 > Web前端 > HTML5

Vue组件-极简地址选择器

时间:2023-04-05 00:06:34 HTML5

一、前言本文使用Vue完成了一个极简地址选择器,接下来带你实现。当然,也有一些值得学习和注意的地方。话不多说,先上demo图。因为每个人的需求不同,我这里就不实现更多的功能了,这样大家增删改查的空间就更大了。GitHub地址:Vue-location_Select2.需要学习的(1)数据更新Vue无法监听。首先要说的就是这一点。我们在Vue中的一个优势就是我们可以直接操作数据而不需要操作dom。但是这个其实有Vue无法监控的数据。比如数组和对象。当然,这只是指一小部分操作,大部分操作都没有问题。接下来说说Vue不能监控哪些数据操作1.数组由于JavaScript的限制,Vue不能检测到以下变化的数组:当你使用索引直接设置一个item时,例如:vm.items[indexOfItem]=修改数组长度时的newValue,例如:vm.items.length=newLength表示不能监听下面的情况,所以这样修改数组不会刷新视图varvm=newVue({data:{items:['a','b','c']}})vm.items[1]='x'//notresponsive,vm.items.length=2//notresponsiveactuallyawaytosolvebothAlsosimple//解决第一类问题vm.$set(vm.items,indexOfItem,newValue)//为了解决第二类问题,可以使用splice:vm.items.splice(newLength)这样Vue监视对阵列操作的更改。当然,还有以下Vue也可以监控的操作:push()pop()shift()unshift()splice()sort()reverse()2.Object由于JavaScript的限制,Vue无法检测添加或删除对象属性!这是关键点。如果动态添加对象属性,请注意添加对象属性的方式是否为$set,否则视图可能无法更新。varvm=newVue({data:{userProfile:{name:'Anika'}}})vm.userProfile.age=27;//看起来还可以,实际上vue是监控不到的,所以解决办法还是老办法,使用vm.$set(vm.userProfile,'age',27);使用Object.assign()添加多个属性也要注意用法//报错Object.assign(vm.userProfile,{age:27,favoriteColor:'VueGreen'})//正确vm.userProfile=Object.assign({},vm.userProfile,{age:27,favoriteColor:'VueGreen'})(二)V-for的用法1.这里直接遍历数组看代码就可以一目了然v-for="(val,index)inarr"//得到的是值和数组下标//通常是2。遍历对象v-for="(val,key,index)inobject"//得到的是键值对和下标//习惯用法

CSS3风格当然这里就不多说了。这个直接给出传送门:css3使用scale实现下划线动画实现极简位置选择。主要代码放在这里吧,虽然总的代码不多。HTML部分
{{key}
{{value}}
{{val}}
jsmethods:{getData(){让xhr=newXMLHttpRequest();//原生ajaxxhr.open('get','http://127.0.0.1:3001/read');//请求模拟xhr.send();xhr.onreadystatechange=()=>{if(xhr.readyState===4&&xhr.status===200){letlocationN=JSON.parse(xhr.responseText);//获取数据,位置jsonfor(letkeyofObject.keys(locationN)){//遍历取出数据,获取key值for(letkey2ofObject.keys(this.locationName)){//遍历数据中的locationName,为了分类letpattern=newRegExp("["+key2.toString()+"]");if(pattern.test(key)){//正则匹配,如果找到则进入对应的分类对象//判断该类中是否存在字母的一组地名,如A,B,Cif(Array.isArray(this.locationName[key2][key.charAt(0)])){//如果存在,直接push地名this.locationName[key2][key.charAt(0)].push(locationN[键]);//如果没有地名,先创建再push}else{this.$set(this.locationName[key2],key.charAt(0),[]);this.locationName[key2][key.charAt(0)].push(locationN[key]);}休息;}}}}}},}在这之后,我们就实现了Vue组件。如果想看代码或者使用的话请点击vue-location_Select,当然喜欢的话也别吝啬你的star哦!