请问我这个直接用变量引入json数据的方式,怎样快速能改成异步请求数据的方式?

<template>

<picker mode="multiSelector"

:value="multiIndex"

:range="multiArray"

@change="handleValueChange"

@columnchange="handleColumnChange">

<slot></slot>

</picker>

</template>

<script>

const CHINA_REGIONS = require('./regions.json')

export default {

props:{

defaultRegions:{

type:Array,

default(){

return []

}

},

defaultRegionCode:{

type:String

},

defaultRegion:[String,Array]

},

data() {

return {

cityArr:CHINA_REGIONS[0].childs,

districtArr:CHINA_REGIONS[0].childs[0].childs,

multiIndex: [0, 0, 0],

isInitMultiArray:true,

}

},

watch:{

defaultRegion:{

handler(region,oldRegion){

if(Array.isArray(region)){

// 避免传的是字面量的时候重复触发

oldRegion = oldRegion || []

if(region.join('')!==oldRegion.join('')){

this.handleDefaultRegion(region)

}

}else if(region&&region.length == 6){

this.handleDefaultRegion(region)

}else{

console.warn('defaultRegion非有效格式')

}

},

immediate:true,

}

},

computed:{

multiArray(){

return this.pickedArr.map(arr=>arr.map(item=>item.name))

},

pickedArr(){

// 进行初始化

if(this.isInitMultiArray){

return [

CHINA_REGIONS,

CHINA_REGIONS[0].childs,

CHINA_REGIONS[0].childs[0].childs

]

}

return [CHINA_REGIONS,this.cityArr,this.districtArr];

}

},

methods: {

handleColumnChange(e){

// console.log(e);

this.isInitMultiArray = false;

const that = this;

let col = e.detail.column;

let row = e.detail.value;

that.multiIndex[col] = row;

try{

switch(col){

case 0:

if(CHINA_REGIONS[that.multiIndex[0]].childs.length==0){

that.cityArr = that.districtArr = [CHINA_REGIONS[that.multiIndex[0]]]

break;

}

that.cityArr = CHINA_REGIONS[that.multiIndex[0]].childs

that.districtArr = CHINA_REGIONS[that.multiIndex[0]].childs[that.multiIndex[1]].childs

break;

case 1:

that.districtArr = CHINA_REGIONS[that.multiIndex[0]].childs[that.multiIndex[1]].childs

break;

case 2:

break;

}

}catch(e){

// console.log(e);

that.districtArr = CHINA_REGIONS[that.multiIndex[0]].childs[0].childs

}

},

handleValueChange(e){

// 结构赋值

let [index0,index1,index2] = e.detail.value;

let [arr0,arr1,arr2] = this.pickedArr;

let address = [arr0[index0],arr1[index1],arr2[index2]];

// console.log(address);

this.$emit('getRegion',address)

},

handleDefaultRegion(region){

const isCode = !Array.isArray(region)

this.isInitMultiArray = false;

let children = CHINA_REGIONS

for(let i=0;i<3;i++){

for(let j=0;j<children.length;j++){

let condition = isCode?children[j].code==region.slice(0,(i+1)*2):children[j].name.includes(region[i]);

if(condition){

// 匹配成功进行赋值

// console.log(i,j,children.length-1);

children = children[j].childs;

if(i==0){

this.cityArr = children

}else if(i==1){

this.districtArr = children

}

this.$set(this.multiIndex,i,j)

// console.log(this.multiIndex);

break;

}else{

// 首次匹配失败就用默认的初始化

// console.log(i,j,children.length-1);

if(i==0 && j==(children.length-1)){

this.isInitMultiArray = true;

}

}

}

}

}

},

}

</script>

CHINA_REGIONS 这个变量的json数据,我想改成从后端请求到数据后再赋值给他 请问有什么直接快速的修改方式吗


回答:

最简单快速的方法是用setTimeout模拟

以上是 请问我这个直接用变量引入json数据的方式,怎样快速能改成异步请求数据的方式? 的全部内容, 来源链接: utcz.com/p/932991.html

回到顶部