Vue手写一个省市区三级联动
2019-05-23 18:46
344 查看
版权声明:原创文章,仿冒必究。 https://blog.csdn.net/jgs525/article/details/90485934
Vue手写一个省市区三级联动
效果如下
上代码(此篇代码思路是运用3个兄弟组件(省=>市=>区(县))传值)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>省市区(县)三级联动</title> <style> select { width: 150px; height: 25px; float: left; border-radius: 5px; border: 1px solid red; outline: none; } </style> </head> <body> <div id="app"> <province></province>//省组件 <city></city>//市组件 <qu></qu>//区(县)组件 </div> </body> <script src="../lib/axios.min.js"></script> <script src="../lib/vue.js"></script> <script> var Province = { template: `<div> <select v-model='currentValue'> <option v-for="item in list1">{{ item.name }}</option> </select> </div>`, data() { return { currentValue: "", list1: [] }; }, //watch监听select标签变化,并发送数据 //先在要监听的select标签里v-model='name',再watch监听该标签数据变化,格式如下 // watch: { // name(name) { // console.log(name); // bus.$emit("aa", name); // } // }, watch: { currentValue(currentValue) { bus.$emit("aa", currentValue); } }, created() { //向服务器发送请求获取数据 axios.get("http://10.8.162.52:3310/regions.json").then(res => { this.list1 = res.data; var arr = this.list1;//将数据打包成arr bus.$emit("bb", arr);//通过bus.$emit(方法名,传递的数据)向兄弟组件发送数据 }); } }; var City = { template: `<div> <select v-model='currentValue'> <option v-for="item in list1">{{ item.name}}</option> </select> </div>`, data() { return { currentValue: "", list: [], list1: [] }; }, watch: { currentValue(currentValue) { bus.$emit("cc",currentValue); } }, created() { bus.$on("bb", this.foo1); bus.$on("aa", this.foo2);//bus.$on接收数据,方法名与派发数据bus.$emit方法名保持一致 }, methods: { foo1(arr) { this.list = arr;先用this.list接收arr }, foo2(currentValue) {//currentValue是接收到的province组件中select标签的当前值 var item = this.list.find(item => item.name ==currentValue);//通过arr.find()方法获取当前省的数据 this.list1 = item.cityList;//将当前省的所有市数据赋给list1 var arr = this.list1;//组件之间相互独立,arr,currentValue,list,list1,foo1,foo2变量不会相互干扰 bus.$emit("dd", arr); } } }; var Qu = { template: `<div> <select> <option v-for="item in list1">{{ item.name}}</option> </select> </div>`, data() { return { list: [], list1: [] }; }, created() { bus.$on("dd", this.foo1); bus.$on("cc", this.foo2); }, methods: { foo1(arr) { this.list = arr; }, foo2(currentValue) {//currentValue是接收到的city组件中select标签的当前值 var item = this.list.find(item => item.name == currentValue); this.list1 = item[0].areaList;//将当前市的所有区(县)数据赋给list1 } } }; var bus = new Vue();//借助于事件车,通过事件车的方式传递数据 var app = new Vue({ el: "#app", components: { province: Province, city: City, qu: Qu } }); </script> </html>
相关文章推荐
- vue用mint-ui的picker组件封装一个省市区三级联动组件
- vue+mint ui+省市区三级联动(编辑地址)
- vue + element +axios实现省市区三级联动。
- js实现一个省市区三级联动选择框代码分享
- 简单的一个用javascript做的'省市区'三级联动效果
- 手把手教你webpack+vue+amaze-vue实现省市区三级联动选择组件
- Vue如何使用vue-area-linkage实现地址三级联动效果 很多时候我们需要使用地址三级联动,即省市区三级联动。网上有很多插件,在此介绍Vue的一款地区联动插件:vue-ar
- 一行代码搞定省市区三级联动(推荐一个JS封装类)
- js实现一个省市区三级联动选择框代码分享
- vue省市区三级联动
- 一行代码搞定省市区三级联动(推荐一个JS封装类)
- vue+iview实现省市区三级联动
- 用php和ajax写一个省市区的三级联动,实现地区的下拉选择
- 省市区三级联动,根据一个cityCode(递归)查询关联的父级信息
- vue 省市区三级联动
- 简易封装一个省市区的三级联动方法
- vue 2.0 picker 省市区三级联动
- 详解Vue、element-ui、axios实现省市区三级联动
- vue省市区三级联动
- iOS 省市区 三级联动 手写纯代码XMLParser解析