zoukankan      html  css  js  c++  java
  • Vue 简单实例 购物车1

    1、新创建一个项目:freemall

    2、安装依赖:axios、vue-axios

    3、配置路由

    import Vue from 'vue'
    import VueRouter from 'vue-router'
    import Cart from '../pages/Cart.vue'
    import Address from '../pages/Address.vue'
    
    Vue.use(VueRouter)
    
    const routes = [
      {
        path: '/',
        name: 'Cart',
        component: Cart
      },
      {
        path: '/address',
        name: 'Address',
        component: Address
      }
    ]
    
    const router = new VueRouter({
      mode: 'history',
      base: process.env.BASE_URL,
      routes
    })
    
    export default router

    4、App.vue文件:

    <template>
      <div id="app">
        <router-view />
      </div>
    </template>

    5、入口文件main.js:

    import Vue from 'vue'
    import App from './App.vue'
    import router from './router'
    import store from './store'
    import axios from 'axios'
    import VueAxios from 'vue-axios'
    import './assets/css/base.css'
    import './assets/css/index.css'
    
    Vue.use(VueAxios, axios)
    // 提示开关
    Vue.config.productionTip = false
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')

    引入 axios 及样式文件。

    6、在 components 目录下新建 Header.vue、Footer.vue、Modal.vue 文件

    头、尾文件就不写了,Modal.vue文件:

    <template>
      <div style="display: none">
        <div class="md-modal modal-msg md-modal-transition md-show">
          <div class="md-modal-inner">
            <div class="md-top">
              <button class="md-close" @click="closeModal">关闭</button>
            </div>
            <div class="md-content">
              <div class="confirm-tips">
                <p slot="message">你确认要删除此条数据吗?</p>
              </div>
              <div class="btn-wrap">
                <a slot="btnGroup" class="btn btn--m" href="javascript:;">确认</a>
                <a slot="btnGroup" class="btn btn--m btn--red" href="javascript:;">关闭</a>
              </div>
            </div>
          </div>
        </div>
        <div class="md-overlay" @click="closeModal"></div>
      </div>
    </template>

    7、在 public 目录下,新建 mock 文件夹,复制粘贴 cart.json 和 address.json 文件。

    8、新建 pages目录,创建 Cart.vue 文件:

    引入Header、Footer、Modal组件,并发起请求:

    <template>
      <div>
        <nav-header></nav-header>
        <div class="nav-breadcrumb-wrap">
          <div class="container">
            <nav class="nav-breadcrumb">
              <a href="/">首页</a>
              <span>购物车</span>
            </nav>
          </div>
        </div>
        <!-- 定义购物车页面图标 -->
        <svg
          style="position: absolute;  0; height: 0; overflow: hidden;"
          version="1.1"
          xmlns="http://www.w3.org/2000/svg"
          xmlns:xlink="http://www.w3.org/1999/xlink"
        >
          <defs>
            <symbol id="icon-ok" viewBox="0 0 32 32">
              <title>ok</title>
              <path
                class="path1"
                d="M31.020 0.438c-0.512-0.363-1.135-0.507-1.757-0.406s-1.166 0.435-1.529 0.937l-17.965 24.679-5.753-5.67c-0.445-0.438-1.035-0.679-1.664-0.679s-1.219 0.241-1.664 0.679c-0.917 0.904-0.917 2.375 0 3.279l7.712 7.6c0.438 0.432 1.045 0.681 1.665 0.681l0.195-0.008c0.688-0.057 1.314-0.406 1.717-0.959l19.582-26.9c0.754-1.038 0.512-2.488-0.538-3.233z"
              />
            </symbol>
            <symbol id="icon-del" viewBox="0 0 32 32">
              <title>delete</title>
              <path
                class="path1"
                d="M11.355 4.129v-2.065h9.29v2.065h-9.29zM6.194 29.935v-23.742h19.613v23.742h-19.613zM30.968 4.129h-8.258v-3.097c0-0.569-0.463-1.032-1.032-1.032h-11.355c-0.569 0-1.032 0.463-1.032 1.032v3.097h-8.258c-0.569 0-1.032 0.463-1.032 1.032s0.463 1.032 1.032 1.032h3.097v24.774c0 0.569 0.463 1.032 1.032 1.032h21.677c0.569 0 1.032-0.463 1.032-1.032v-24.774h3.097c0.569 0 1.032-0.463 1.032-1.032s-0.463-1.032-1.032-1.032v0z"
              />
              <path
                class="path2"
                d="M10.323 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"
              />
              <path
                class="path3"
                d="M16 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"
              />
              <path
                class="path4"
                d="M21.677 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"
              />
            </symbol>
          </defs>
        </svg>
        <div class="container">
          <div class="cart">
            <div class="page-title-normal">
              <h2 class="page-title-h2">
                <span>我的购物车</span>
              </h2>
            </div>
            <div class="item-list-wrap">
              <div class="cart-item">
                <div class="cart-item-head">
                  <ul>
                    <li>商品信息</li>
                    <li>商品金额</li>
                    <li>商品数量</li>
                    <li>总金额</li>
                    <li>编辑</li>
                  </ul>
                </div>
                <ul class="cart-item-list">
                  <li v-for="item in cartList" :key="item.productId">
                    <div class="cart-tab-1">
                      <div class="cart-item-check">
                        <a
                          href="javascipt:;"
                          :class="[item.checked ? 'checked' : '', 'checkbox-btn', 'item-check-btn']"
                        >
                          <svg class="icon icon-ok">
                            <use xlink:href="#icon-ok" />
                          </svg>
                        </a>
                      </div>
                      <div class="cart-item-pic">
                        <img :src="'/imgs/' + item.productImage" />
                      </div>
                      <div class="cart-item-title">
                        <div class="item-name">{{ item.productName }}</div>
                      </div>
                    </div>
                    <div class="cart-tab-2">
                      <div class="item-price">{{ item.productPrice }}</div>
                    </div>
                    <div class="cart-tab-3">
                      <div class="item-quantity">
                        <div class="select-self select-self-open">
                          <div class="select-self-area">
                            <a class="input-sub">-</a>
                            <span class="select-ipt">{{ item.productNum }}</span>
                            <a class="input-add">+</a>
                          </div>
                        </div>
                      </div>
                    </div>
                    <div class="cart-tab-4">
                      <div class="item-price-total">¥{{ item.productPrice * item.productNum }}元</div>
                    </div>
                    <div class="cart-tab-5">
                      <div class="cart-item-opration">
                        <a href="javascript:;" class="item-edit-btn">
                          <svg class="icon icon-del">
                            <use xlink:href="#icon-del" />
                          </svg>
                        </a>
                      </div>
                    </div>
                  </li>
                </ul>
              </div>
            </div>
            <div class="cart-foot-wrap">
              <div class="cart-foot-inner">
                <div class="cart-foot-l">
                  <div class="item-all-check">
                    <a href="javascipt:;">
                      <span class="checkbox-btn item-check-btn check">
                        <svg class="icon icon-ok">
                          <use xlink:href="#icon-ok" />
                        </svg>
                      </span>
                      <span>全选</span>
                    </a>
                  </div>
                </div>
                <div class="cart-foot-r">
                  <div class="item-total">
                    总价:
                    <span class="total-price">¥89.00元</span>
                  </div>
                  <div class="btn-wrap">
                    <a class="btn btn--red btn--dis">结算</a>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <modal></modal>
        <navFooter></navFooter>
      </div>
    </template>
    
    <script>
    import navHeader from '../components/Header'
    import navFooter from '../components/Footer'
    import Modal from '../components/Modal'
    export default {
      name: 'Cart',
      components: {
        navHeader,
        navFooter,
        Modal
      },
      data() {
        return {
          cartList: [],
          priceCount: 0 // 总价
        }
      },
      mounted() {
        this.getCart() // 初始化购物车列表
      },
      methods: {
        getCart() {
          this.axios.get('/mock/cart.json').then(res => {
            // debugger
            console.log(res)
            this.cartList = res.data.data
          })
        }
      }
    }
    </script>

    效果图:

  • 相关阅读:
    HDU 2112 HDU Today,最短路径算法,Dijkstra
    最小生成树,POJ和HDU几道题目的解题报告(基于自己写的模板)
    图基本算法 最小生成树 Prim算法(邻接表/邻接矩阵+优先队列STL)
    合并相同值得单元格(纵向)
    request.startAsync()不支持异步操作
    DIV强制不换行
    兼容各浏览器的css背景图片拉伸代码
    程序猿之八荣八耻
    使用JEECG过程中的问题汇总(持续更新)
    Firefox的缓存问题
  • 原文地址:https://www.cnblogs.com/joe235/p/12703859.html
Copyright © 2011-2022 走看看