• vue-cli3.0+vue-router+vuex+vant搭建简易项目问题记录


    要实现的功能

    问题一:布局

    想动态获取列表容器的高度,实现局部滑动。

    想法一:flex布局

    结果:失败

    因为每个组件样式为了不污染全局,加了scope,大的框架布局到了组件内获取不到,研究了好久只好放弃

    想法二:js动态获取

    所以最终用的js动态计算

    <template>
        <div :style="style"></div>
    </template>
    <script>
        data(){
            return{
               style:`${height}px`//height为动态计算出来的值
            } 
        }  
    </script>    

    问题二:默认路由

    我这里用了两种方式

    //方式一:'/'
    {
        path: '/',//默认为home页
        name: 'home',
        component: Home
    }
    //方式二:redirect:'',路由重定向
    {
        path: '/',
        name: 'home',
        component: Home
        children:[
            {
                  path:'/resultList/:type',
                  name:'resultList',
                  component:ResultList
             }
        ],
        redirect:'resultList/hot'//默认参数为hot
    }

    问题三:底部导航显示问题

    首页跟我的页底部导航显示,关于我们底部导航隐藏

    实现步骤:

    一:使用vuex定义全局状态,不会vuex?

    五分钟搞懂Vuex

    store.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    const state = {
        showTabBar:true//定义一个开关
    }
    
    export default new Vuex.Store(option:{
       state 
    })

    二:在组件上使用v-show判断是否显示

    Home.vue

    <footer v-show="$store.state.showTabBar">
          <Footer/>
    </footer>             

    三:使用生命周期钩子函数

    在el没有被挂载到实例上之前的函数都可以,即,beforeCreate()、created()、beforeMount

    操作全局状态  

    export default {
      name:'about',
      created(){
         this.$store.state.showTabBar = false;  
      }  
    }

    问题四:axios跨域配置获取本地json

    声明:vue-cli3.0的静态文件放在public里

    在新目录新建vue.config.js

    /**
     * 配置服务
     */
    module.exports = {
        devServer:{
            host:'10.12.10.88',
              proxy:{
                '/api':{
                      target:'http://10.12.10.88:8080/',
                      ws:true,
                      changeOrigin: true,
                      pathRewrite:{
                          '^/api':''
                      }
                  }
             }
        }
    }            

    main.js

    import Vue from 'vue'
    import axios from 'axios'
    //因为axios不是vue的内置方法,所以不能用Vue.use()
    Vue.prototype.$axios = axios;
    //设置axios的默认配置
    axios.defaults.baseURL = '/';
    axios.defaults.headers.post['Content-Type'] = ['application/json']

    使用

    this.$axios.get('/resultData.json')//静态文件路径
       .then((data)=>{
           console.log(data); 
       })
                       

    问题五:同一组件根据参数不同,渲染不同的数据

    一、起初想到的是计算属性:computed,功能倒是实现了,切换组件,根据参数渲染不同数据

    然后发现后台在一直请求接口,为啥呢,因为computed发现data里的属性发生变化,就会再次执行这个函数,所以放弃了。

    二、要实现的效果就是点击一个组件,请求一次接口,变的是type参数,所以想到了监听路由或者路由导航守卫,详情

    //监听路由
    watch:{
       '$route'(to,from){
            this.type = to.params.type;
            this.$axios.get('/resultData.json')
              .then((data)=>{
                  this.resultData = data.data[this.type]
              })
       }
    }
    //导航守卫也可以实现
    //beforeRouteUpdate在当前路由改变,但是该组件被复用时调用
    beforeRouteUpdate(to,from,next){
        this.type = to.params.type;
        this.$axios.get('/resultData.json')
          .then((data)=>{
               this.resultData = data.data[this.type]
          })
    }

    问题六:build打包时,index.html放浏览器上显示空白

    npm run build之后想要看看dist里的index.html能不能运行,发现不行,因为灭有服务器

    然后你会发现你build完之后,他会提示你一个网站 ==》vue-cli 部署

    然后提示我们需要全局安装一个serve,然后运行

    npm install -g serve
    # -s flag means serve it in Single-Page Application mode
    # which deals with the routing problem below
    serve -s dist

    然后根据提示打开,发现可以了

  • 相关阅读:
    洛谷 P2294 【[HNOI2005]狡猾的商人】
    洛谷 P5960 【【模板】差分约束算法】/差分约束算法入门
    洛谷 P3916 【图的遍历】
    洛谷 P1347 【排序】
    洛谷 P3243 【[HNOI2015]菜肴制作】
    ES6,ES7,ES8,ES9,ES10新特性一览
    Sass、LESS 和 Stylus区别总结
    MyBatis更新用户信息操作
    MyBatis使用mapper映射文件删除用户信息
    MyBatis使用mapper映射文件添加用户信息
  • 原文地址:https://www.cnblogs.com/hess/p/11399176.html
Copyright © 2020-2023  润新知