• vue项目总结,所用到的技术点


    1.用到的技术点

    vue     是一个渐进式JavaScript框架    npm install vue
    vue-route    是一个路由匹配功能    npm install vue-router              
    vue-resource    发送ajax请求的    npm install vue-resource
    vue-preview     图片预览插件        npm i vue-preview -S
    vuex    组件传值    npm install vuex --save
    mint-ui    基于vue的移动端组件    npm i mint-ui -S
    mui    最接近原生的前端框架    
    

    2.  template.html  是整个主页面,最终所有的js和css和html都会匹配到这里的

      1.只需要定义一个ID容器  <div id="app"></div>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Vue项目</title>
        <!-- 我是一个好人 -->
        <style>
            @media only screen and (320px){
                html{
                    font-size:16px;
                }
            }
    
            @media only screen and (360px){
                html{
                    font-size:18px;
                }
            }
    
            @media only screen and (414px){
                html{
                    font-size:20px;
                }
            }
    
            body{
                margin: 0px;
                padding: 0px;
            }
        </style>
    </head>
    <body>
        <div id="app"></div>
    </body>
    </html>
    

    2.  main.js   是一个主模块集成了所有的第三方包和css文件和js文件和路由匹配  

      1.引入第三方包,使用import关键字,基于vue的必须集成到vue中以 Vue.use() 方法

      2.导入项目中所需要的css

      3.让app.vue给用户显示的第一个组件

        1.首先app.vue引入到mian.js中  import App from './App.vue'

        2.在Vue实例中定义render函数,变量名需要一致

          render:function(createElement){ //项目一启动之后,呈现给用户的第一个组件

            return createElement(App)

          }
      4.设置全局过滤器  Vue.filter()  
      5.路由整个步骤
        1.导入需要设置路由的组件 
     
    import home from './components/home/home.vue'
    import category from './components/category/category.vue'
        2.设置路由规则 new VueRouter实例  
          {path:'/home',component:home},来进行路由匹配,<router-link go="/home">需要跟go属性一致
          {path:'/',redirect:'/home'} 来进行默认路由匹配
    const router = new VueRouter({
            routes:[
              {path:'/',redirect:'/home'},
              {path:'/home',component:home},
              {path:'/category',component:category},
              {name:"pictureAndTextIntruduction",path:"/goods/pictureAndTextIntruduction",component:pictureAndTextIntruduction},
              {path:"/goods/goodscomment",component:goodscomment}
            ]
          })
        3.把路由匹配规则放到跟实例 new Vue({})的router中,就实现整个路由匹配功能了

    new Vue({
       router:router
    })   
    6.vuex的使用步骤
      1.新建一个空仓库 var store = new Vuex.Store()
        仓库里有四个对象
        state  存储数据的地方
        getters 获取数据的地方
        mutations 同步更新数据
        actions 异步更新数据
      2.把仓库的东西放到跟实例中,变量名需一致
    new Vue({
       store:store
    })   
         
    //导入我们的第三方包
    import Vue from 'vue' //es5 ===> var vue = require('vue')
    import Mint from 'mint-ui'
    import VueRouter from 'vue-router'
    import VueResource from 'vue-resource'
    import moment from 'moment'
    import VuePreview from 'vue-preview'
    import axios from 'axios'
    import Vuex from 'vuex'
    
    //集成到Vue中
    Vue.use(Mint)
    Vue.use(VueRouter) // vue.$route vue.$router
    Vue.use(VueResource) //vue.$http...
    Vue.use(VuePreview)
    Vue.use(Vuex) //$store
    
    Vue.prototype.$axios = axios
    
    //导入项目中需要用到的css
    import 'mint-ui/lib/style.min.css'
    import './statics/mui/css/mui.min.css'
    import './statics/css/common.css' //自己写的样式,放在最好
    
    
    //导入我们要渲染的根组件这个模块
    import App from './App.vue'
    
    //全局过滤器
    Vue.filter('dateFmt',(input,formatString)=>{
        const lastFormatString = formatString || 'YYYY-MM-DD HH:mm:ss'
    
        /**
         * 参数1:格式化的原始时间
         * 参数2:格式化的字符串
         */
        return moment(input).format(lastFormatString)
    })
    
    
    //导入需要设置路由规则的组件
    import home from './components/home/home.vue'
    import category from './components/category/category.vue'
    import shopcart from './components/shopcart/shopcart.vue'
    import mine from './components/mine/mine.vue'
    import newslist from './components/news/newslist.vue'
    import newsinfo from './components/news/newsinfo.vue'
    import photolist from './components/photo/photolist.vue'
    import photoinfo from './components/photo/photoinfo.vue'
    import goodslist from './components/goods/goodslist.vue'
    import goodsinfo from './components/goods/goodsinfo.vue'
    import pictureAndTextIntruduction from './components/goods/pictureAndTextIntruduction.vue'
    import goodscomment from './components/goods/goodscomment.vue'
    
    //创建路由对象,设置路由规则
    const router = new VueRouter({
        routes:[
            {path:'/',redirect:'/home'},
            {path:'/home',component:home},
            {path:'/category',component:category},
            {path:'/shopcart',component:shopcart},
            {path:'/mine',component:mine},
            {path:'/news/newslist',component:newslist},
            {path:'/news/newsinfo/:newsId',component:newsinfo},
            {path:'/photo/photolist',component:photolist},
            {path:'/photo/photoinfo/:photoId',component:photoinfo},
            {path:'/goods/goodslist',component:goodslist},
            {path:"/goods/goodsinfo/:goodsId",component:goodsinfo},
            {name:"pictureAndTextIntruduction",path:"/goods/pictureAndTextIntruduction",component:pictureAndTextIntruduction},
            {path:"/goods/goodscomment",component:goodscomment}
        ]
    })
    
    //创建一个仓库
    //window
    const store = new Vuex.Store({
      state: {//存储数据的地方
        goodsList:[]
      },
      getters: {//获取数据
        //获取加入购物车的商品的数组
        getGoodsList(state){
            return state.goodsList
        },
        //获取加入购物车中的总数量
        getGoodsCount(state){
            let totalCount = 0
            for(var i=0;i<state.goodsList.length;i++){
                totalCount+=state.goodsList[i].count
            }
    
            return totalCount
        }
      },
      mutations: {//`同步更改数据`
        /**
         * 添加商品到购物车的方法
         * 其中参数1固定的,就是代表我们的state
         * 参数2:商品信息的对象
         */
        addGoods(state,goodsObj){
            //console.log("添加商品到购物车")
            //console.log(goodsObj)
            //goodsObj ==> {goodsId:87,count:3}
            state.goodsList.push(goodsObj)
            //console.log(state.goodsList)
        },
        deleteGoodsById(state,goodsId){
            for(var i = state.goodsList.length-1 ;i>=0;i--){
                if(goodsId==state.goodsList[i].goodsId){
                    state.goodsList.splice(i,1)
                }
            }
        }
      },
      actions: {//`异步更改数据`
        //可以认为是$store对象
        addGoodsAction(context,goodsObj){
            //调用mutations
            context.commit('addGoods',goodsObj)
        }
      }
    })
    
    //创建根实例,到时候,Vue去解析id=app的div
    new Vue({
        el:"#app",
        router,
        store,
        render:function(createElement){ //项目一启动之后,呈现给用户的第一个组件
            return createElement(App)
        }
    })
    

    3.  app.vue  是主页面,所有的html视图会集合到这里来,用到的技术点

      1.使用mint-Ui的header模块就可以了固定header部分了

      2.使用v-show指令是否隐藏或者显示 返回按钮

        1.当变量 isShowBack=true的时候让其显示,否则隐藏

        2.当点击返回的时候调用 goBack() 函数  this.$router.go(-1)回退功能

        3.当组件创建的时候调用函数 this.isShowOrHidden(this.$route.path)

           函数isShowOrHidden(path)判断path的值来改变 isShowBack的值

      3.中间内容,通过路由匹配视图标签,路由变化的值在这里显示 <router-view></router-view>

      4.底部内容使用mint-Ui的Tabbar模块来进行排版

      5.使用三元表达式来判断底部是否隐藏

        :class="isShowTabBar ? '' : 'tabBarStyleHidden' "

      6.使用 <router-link to="/home"></router-link>来进行超链接调转,它的底层最终会变成<a href="/home">   

    <template>
      <div>
          <!-- 1.0 头部,标题栏 -->
          <mt-header fixed title="Vue项目"></mt-header>
    
          <div v-show="isShowBack" @click="goBack" class="backStyle"><返回</div>
    
          <!-- 2.0 中间内容,根据路由动态变化 -->
          <router-view></router-view>
    
          <!-- 3.0 底部的tabBar -->
          <mt-tabbar fixed :class="isShowTabBar ? '' : 'tabBarStyleHidden' ">
            <mt-tab-item>
              <router-link to="/home">
                <img src="http://img08.jiuxian.com/bill/2016/0224/cccd8df26a754c139de800406af82178.png">
              </router-link>
            </mt-tab-item>
            <mt-tab-item>
              <router-link to="/category">
                <img src="http://img07.jiuxian.com/bill/2016/0224/36a49b28ec5e4cdf9dbe37988199487d.png">
              </router-link>
            </mt-tab-item>
            <mt-tab-item>
              <router-link to="/shopcart">
                <img src="http://img08.jiuxian.com/bill/2016/0224/42baf46987b6460bb43b3396e9941653.png">
                <span class="badgeStyle">{{myCount}}</span>
              </router-link>
            </mt-tab-item>
            <mt-tab-item>
              <router-link to="/mine">
                <img src="http://img09.jiuxian.com/bill/2016/0224/cba9029a8f4444a989a2ab5aa84c6538.png">
              </router-link>
            </mt-tab-item>
          </mt-tabbar>
      </div>
    </template>
    
    // scoped代表样式私有
    <style scoped>
      .backStyle{
        z-index: 2;
        position: fixed;
        left:15px;
        top:10px;
        font-size: 14px;
        color: #fff;
        font-weight: 900;
      }
    
      .tabBarStyleHidden{
        display: none;
      }
    
      img{
        42px;
        height: 35px;
      }
    
      .mint-tabbar>.mint-tab-item.is-selected{
        background-color: #fafafa;
      }
    
      .badgeStyle{
          font-size: 11px;
          line-height: 1.3;  
          position: absolute;
          top: 7px;
          left: 63%;
          text-align: center;
          padding: 1px 5px; 
          color: #fff;
          border-radius: 11px; 
          background: red;
        }
    </style>
    
    <script>
      //导入公共的Vue对象
      import bus from './common/commonvue.js'
    
      export default{
        data(){
          return {
            isShowTabBar:true,
            isShowBack:false,
            myCount:0
          }
        },
        methods:{
          goBack(){
            this.$router.go(-1)
          },
          isShowOrHidden(path){
              if(path=="/home"){
                this.isShowTabBar = true
                this.isShowBack = false
              }else{
                this.isShowTabBar = false
                this.isShowBack = true
              }
          }
        },
        created(){
            this.isShowOrHidden(this.$route.path)
    
            //监听加入购物车的动作
            // bus.$on('goodsCount',function(count){
            //     this.myCount+=count
            // }.bind(this))
        },
        updated(){//当仓库的值,发生更改,同样会调用这个方法
          this.myCount = this.$store.getters.getGoodsCount
        },
        watch:{
          /**
          "$route":(newValue,oldValue)=>{
              console.log(this)
              if(newValue.path=="/home"){
                this.isShowTabBar = true
              }else{
                this.isShowTabBar = false
                console.log(this.isShowTabBar)
              }
          }
          */
          "$route":function(newValue,oldValue){
              this.isShowOrHidden(newValue.path)
          }
        }
      }
    </script> 
    

      

        

  • 相关阅读:
    [luogu 5163] WD与地图
    AtCoder Grand Contest 013&014
    [NOI2018] 冒泡排序
    [省选联考 2020 A 卷] 魔法商店
    [省选集训2022] 模拟赛11
    [学习笔记] 随机化贪心
    [省选集训2022] 模拟赛12
    JVM内存结构、Java对象模型和Java内存模型
    代码优化:当复制大量数据时,使用System.arraycopy()命令
    多线程之线程优先级
  • 原文地址:https://www.cnblogs.com/wade1220/p/7401908.html
Copyright © 2020-2023  润新知