天天看点

vue基于mint-ui的城市选择3级联动的示例

项目是基于 vue2 的移动端项目

1、实际效果

vue基于mint-ui的城市选择3级联动的示例

地址三级联动 mint-ui picker.png

2、首先你需要去下载一个包含中国省份,城市,区县的数据

如下:

https://github.com/artiely/Administrative-divisions-of-China(里面包含二级联动数据,三级联动数据,四级联动数据等,找到自己需要的)

3、具体代码

主要是用到了mint-ui的picker组件,关于mint-ui的使用就自行看官网

Ⅰ 、html组件

?

1

2

3

4

<

div

>

<

mt-picker

:slots

=

"myAddressSlots"

@

change

=

"onMyAddressChange"

></

mt-picker

>

<

p

>地址3级联动:{{myAddressProvince}} {{myAddressCity}} {{myAddresscounty}}</

p

>

</

div

>

Ⅱ 、组件方法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

<script>

import { Picker } from

'mint-ui'

;

import myaddress from

'../../../static/address3.json'

//引入省市区数据

export

default

{

name:

''

,

components: {

'mt-picker'

: Picker

},

props: {},

data () {

return

{

myAddressSlots: [

{

flex: 1,

defaultIndex: 1,   

values: Object.keys(myaddress), 

//省份数组

className:

'slot1'

,

textAlign:

'center'

}, {

divider:

true

,

content:

'-'

,

className:

'slot2'

}, {

flex: 1,

values: [],

className:

'slot3'

,

textAlign:

'center'

},

{

divider:

true

,

content:

'-'

,

className:

'slot4'

},

{

flex: 1,

values: [],

className:

'slot5'

,

textAlign:

'center'

}

],

myAddressProvince:

'省'

,

myAddressCity:

'市'

,

myAddresscounty:

'区/县'

,

}

},

created() {

},

methods: {

onMyAddressChange(picker, values) {

if

(myaddress[values[0]]){ 

//这个判断类似于v-if的效果(可以不加,但是vue会报错,很不爽)

picker.setSlotValues(1,Object.keys(myaddress[values[0]]));

// Object.keys()会返回一个数组,当前省的数组

picker.setSlotValues(2,myaddress[values[0]][values[1]]);

// 区/县数据就是一个数组

this

.myAddressProvince = values[0];

this

.myAddressCity = values[1];

this

.myAddresscounty = values[2];

}

},

},

mounted(){

this

.$nextTick(() => {

//vue里面全部加载好了再执行的函数  (类似于setTimeout)

this

.myAddressSlots[0].defaultIndex = 0   

// 这里的值需要和 data里面 defaultIndex 的值不一样才能够初始化

//因为我没有看过源码(我猜测是因为数据没有改变,不会触发更新)

继续阅读