2. The element-china-area-data dependency and element-plus cascade selector in vue build a three-level linkage of provinces and cities

element-china-area-data dependency and element-plus cascade selector in vue to build three-level linkage of provinces and cities

Effect :
image-20220127030930100

1. vue unso element-china-area-data

npm install element-china-area-data -S

Import dependencies:

import {
    
     regionData, CodeToText } from 'element-china-area-data'

2. elementplus cascade selector

<el-cascader></el-cascader>

3. Code:

<template>
	<div>
		<h1>三级联动和级联选择器的使用</h1>
		<el-cascader  :options='options' v-model='selectedOptions' @change='addressChange'></el-cascader>
	</div>
</template>
<script>
	import {
      
       regionData, CodeToText } from 'element-china-area-data'
	export default {
      
      
	  name: 'addaddress',
	  data(){
      
      
	    return{
      
      
	       options: regionData,//不带‘全部’的三级联动
	       //selectedOptions: "请选择",//或者写字符串,不影响数组格式。
		   selectedOptions:['110000', '110100', '110101']  //这里给一个默认省市区
	       }
	    },
	  
	  methods:{
      
      
		 addressChange (arr) {
      
      
		      // console.log(this.selectedOptions) //  Proxy {0: '120000', 1: '120100', 2: '120101'}
		      // console.log(arr) //  Proxy {0: '120000', 1: '120100', 2: '120101'}  和上句一样
			  var addressText=CodeToText[arr[0]]+CodeToText[arr[1]]+CodeToText[arr[2]]
			  console.log(addressText) // addressText为el-cascader的值 北京市 市辖区 朝阳区
		    }
		  
	  } 
	  
	}
</script>
<style scoped>
	
</style>

4. Practical application

Because the three-level linkage of provinces and cities is not used alone, it must be used as part of the address in a form carrying user information as a function of selecting provinces and cities in the address.

For example like this:

image-20220127030826705

<template>
  <div>
		<!-- 添加地址表单 -->
		<el-form ref="add_address" :model="add_address" label-width="120px">
			<h5>{
   
   {add_address.title}}</h5>
		    <el-form-item label="姓名" prop="name">
		      <el-input v-model="add_address.name" ></el-input>
		    </el-form-item>
			<el-form-item label="电话" prop="tel">
			  <el-input v-model="add_address.tel" ></el-input>
			</el-form-item>
            <!--1. 三级联动放在表单项里面 -->
			<el-form-item label="省市区" prop="selectedOptions">
			  <el-cascader  :options='options' v-model='add_address.selectedOptions' @change='addressChange'></el-cascader>
			</el-form-item>
            <!--2. 省市区下的详细地址另写一个变量表示 -->
		    <el-form-item label="详细地址" prop="detailaddress">
		      <el-input v-model="add_address.detailaddress" ></el-input>
		    </el-form-item>
			<el-form-item>
			    <el-button type="primary" @click="onSubmit">保存</el-button>
			    <el-button @click="clear('add_address')">取消</el-button>
			</el-form-item>
            <!--5.  展示省市区+详细地址: -->
            展示省市区+详细地址:
            {
   
   { addressText}}{
   
   {detailaddress}}
		</el-form>
      
</div>
</template>
<script>
// 引入表单
import {
      
       reactive } from 'vue'
//引入省市区
import {
      
       regionData, CodeToText } from 'element-china-area-data'	

  export default{
      
      
	name:"addresslist",
    data(){
      
      
      return{
      
      
        address_list:[],
        add_address:{
      
      
		  title:'添加地址',
          name:'',
          tel:'',
          //3.selectedOptions放进表单对象
		  selectedOptions:['110000', '110100', '110101'], 
		  addressText:'北京市市辖区东城区',   //4.1省市区的文字,另设addressText通过函数赋值得到。selectedOptions只能在它本身的框中展示,不能作为文字展示变量。
          detailaddress:'', 
        },
		options: regionData,
		
			
      }
    },
   
    methods:{
      
      
		//4.2省市区的文字 函数 得到省市区的文字赋值给data的add_address.addressText
		addressChange (arr) {
      
      
			// 此句为el-cascader的值 
			var addressText=CodeToText[arr[0]]+CodeToText[arr[1]]+CodeToText[arr[2]]
			console.log(addressText)
			this.add_address.addressText=addressText
		   },
		
     }
      
  }
</script>

Guess you like

Origin blog.csdn.net/yangyangdt/article/details/122711509