欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解vantUI框架在vue项目中的应用踩坑

程序员文章站 2022-03-07 08:13:17
1.订单提交地址等组件的应用。 使用的组件有如下: import {card,button,toast,addresslist,popup,addressedi...

1.订单提交地址等组件的应用。

使用的组件有如下:

import {card,button,toast,addresslist,popup,addressedit,area} from 'vant'

主要是配货地址编辑这块;

 <van-address-edit
           :area-list="arealist"
           :address-info="addressinfo"
           show-postal
           show-delete
           show-set-default
           show-search-result
           
           @save="onsave"
           @delete="ondelete"
           @change-detail="onchangedetail"
          />

地址编辑。没有用默认的地址编辑属性:search-result

search-result 详细地址搜索结果

所以去掉了,一是没有做地理搜索功能。而且发现模拟测试老是有bug,干脆去掉。

2.默认list属性。要重新定义。配合自己需要做的功能。文档给的属性很少

list:[
    { id: '1',
     name: '张三',
     tel: '13000000000',
     province:'江苏',
     city:'无锡',
     county:'崇安区',
     area_code:'120000',
     address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室',
     postal_code:'123456',
    }
   ],

原来的

{
     id: '1',
     name: '张三',
     tel: '13000000000',
     address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室'
    },

,后添加详细的数据,是为了方便后期做更改编辑功能。

3.地址json文件。

默认要导入全国地址表,

// 导入 area.js
import arealist from '../../../config/area.min.js'

直接在函数。将数据绑定给了模型 arealist

 :area-list="arealist"

4.保存地址:

默认数据类型对象。所以定义了一个addr。否则老是报错。但不影响程序运行。

addr重新组合了拿到的数据。压入list里去渲染,这里做了下判断是否保存数据成功

 let addr = new object;
   console.log('content');
   console.log(content);
   let len = this.list.length + 1;
   addr = {
    id:len,
    name:content.name,
    tel:content.tel,
    city:content.city,
    county:content.county,
    is_default:content.is_default,
    postal_code:content.postal_code,
    province:content.province,
    area_code:content.area_code,
    address:content.province+content.city+content.county+content.address_detail
   };
   let is_add = this.list.push(addr);

5,编辑的时候。 onedit(item, index) 这个item就是我最先更改的list数据模型了。这里有需要的地区code码。这就是想要的。

因为跳到编辑页面,需要将地区重新解析出来。测试时可以。

其中待完善:编辑时候的详细地址未变化。删除地址等操作

下方。测试代码demo 

<template>
 <div class="home-page">
  <div class="home">
   <!-- top 高度固定6vh; -->
   <header-vue></header-vue>
   <!-- 内容滚动 -->
   <div class="home-content wrapper" ref="wrapper"> 
     <div class="content">
      <div style="min-height:900px; border:1px solid red;">
        进入订单页面显示订单列表。开始编辑地址收货表。如果之前有,查询出来,直接选择上。没有用户开始去编辑
      
        <!-- 新增收货地址:vant - addresslist -->
        <van-address-list
         v-model="chosenaddressid"
         :list="list"
         @add="onadd"
         @edit="onedit"
        />
        <!-- 弹出层,提示选择地址,没有则编辑 -->
 
        <van-popup v-model="show1" position="" :overlay="false">
         <van-button @click="show1 = false">关闭</van-button>
         <!-- 地址组件 -->
          <!-- <div style="width:100vw;height:100vh;background:#fff;">地址编辑内容</div> -->
          <van-address-edit
           :area-list="arealist"
           :columns-num="2"
           :address-info="addressinfo"
           show-postal
           show-delete
           show-set-default
           show-search-result
           
           @save="onsave"
           @delete="ondelete"
           @change-detail="onchangedetail"
          />
        </van-popup>
        <!-- vatn - card -->
        <van-card
         title="标题"
         desc="描述" 
         num="2"
         price="2.00"
         :thumb="imageurl"
        >
         <div slot="footer">
          <van-button size="mini">按钮</van-button>
          <van-button size="mini">按钮</van-button>
         </div>
        </van-card>
 
      </div>
 
     </div>
   </div>
 
  </div>
 </div>
</template>
 
<script>
import bscroll from 'better-scroll'
import headervue from '../../components/common/header/header.vue'
// 导入 area.js
import arealist from '../../../config/area.min.js'
 
import {card,button,toast,addresslist,popup,addressedit,area} from 'vant'
 
export default {
 name: '',
 components:{ 
  headervue,
  [card.name]:card,
  [button.name]:button,
  [toast.name]:toast,
  [addresslist.name]:addresslist,
  [popup.name]:popup,
  [addressedit .name]:addressedit,
  [area.name]:area,
 },
 data () {
  return {
   msg: 'welcome to home.vue app sss',
   chosenaddressid:'1',
   show:false,
   show1:false,
   arealist:'',
   searchresult:[
    { id: '1',
     name: '张三',
     tel: '13000000000',
     address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室'
    }
   ],
   addressinfo:'',
   imageurl:'kdkk',
   list:[
    { id: '1',
     name: '张三',
     tel: '13000000000',
     province:'江苏',
     city:'无锡',
     county:'崇安区',
     area_code:'120000',
     address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室',
     postal_code:'123456',
    }
   ],
  }
 },
 mounted(){
  // 初始化滚动插件 better-scroll
  this.scroll = new bscroll(this.$refs.wrapper,{
    scrolly:true,
    click:true,//一开始的点击事件被bscroll阻止了,设置这个才能点击
  })
 
  this.getorderdate()
 },
 methods:{
  getorderdate:function(){
   console.log('获取 该用户名下的订单表数据')
  },
  onadd() {
   console.log('新增收货地址');
   this.show1 = true;
   console.log('arealist')
   console.log(arealist)
   this.arealist = arealist;
   // 地址编辑默认信息
   this.addressinfo = new object;
  },
  onedit(item, index) {
   let addressinfo = new object;
   this.arealist = arealist;
   // toast('编辑收货地址:' + index);
   console.log('编辑收货地址:' + index);
   console.log(item);
   // 进入编辑模式
   this.show1 = true;
   addressinfo = {
    id:item.id,
    name:item.name,
    tel:item.tel,
    province:item.province,
    city:item.city,
    county:item.county,
    area_code:item.area_code,
    address_detail:item.address,
    postal_code:item.postal_code,
    is_default:item.is_default,
   }
 
   this.addressinfo = addressinfo;
  },
  onsave(content) {
   let addr = new object;
   console.log('content');
   console.log(content);
   let len = this.list.length + 1;
   addr = {
    id:len,
    name:content.name,
    tel:content.tel,
    city:content.city,
    county:content.county,
    is_default:content.is_default,
    postal_code:content.postal_code,
    province:content.province,
    area_code:content.area_code,
    address:content.province+content.city+content.county+content.address_detail
   };
   let is_add = this.list.push(addr);
   // 判断是否选中默认
   if (content.is_default) {
    this.chosenaddressid = len;
   }
   if (is_add) {
    this.show1 = false;
   }
   console.log(this.list);
   // this.list = listarr;
   // this.list = [{
   //   id: '1',
   //   name: '张三',
   //   tel: '13000000000',
   //   address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室'
   // }];
  },
  ondelete() {
   toast('delete');
   console.log('delete');
  },
  onchangedetail(val) {
    // if (val) {
    //  this.searchresult = [{
    //   name: '黄龙万科中心',
    //   address: '杭州市西湖区'
    //  }];
    // }else {
    //   this.searchresult = [];
    // }
  }
  
 },
}
</script>
 
<!-- add "scoped" attribute to limit css to this component only -->
<style >
 .home-page{}
 .home{
  width: 100%;
 
 }
 .header{
  width: 100%;
  height: 6vh;
  border-bottom: 1px solid #ddd;
 }
 .home-content{
  height: 94vh;
  border: 1px solid #000;
  overflow: hidden;
 }
 
 /*弹出层*/
 .van-popup{
 /* width: 100%;
  top: 40%!important;*/
 }
 .van-address-list__add{
  position: relative!important;
  z-index: 1999;
  font-size: 14px;
 }
 .van-cell{
  position: relative!important;
 }
 .van-popup{
  height: 100%;
  width: 100%;
 }
 .van-address-list__group{
 padding-bottom: 10px!important;
 }
 
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。