zoukankan      html  css  js  c++  java
  • Vue2.0项目实战语法

    一、安装配置依赖

    1) vue init webpack-simple 项目名称    

    2) cnpm install

    3 )  npm run dev

    4 )  cnpm install vuex vue-router axios -D

    5 )  cnpm install style-loader css-loader -D

         6 )  需要在webpack.config.js中加入

             {

            test: /.css$/,

            loader: 'style-loader!css-loader'

             }

     7 )  

    二、vue项目流程

    1) 规划组件结构 (Nav.vue、Header.vue、Home.vue)

    2) 编写路由(vue-router)

    3 )  编写具体每个组件的功能

     

    三、项目结构

    1) 在src中建立components存放组件的文件夹

    2) assets存放

     

    四、组件篇-comonents

    1) 在src中建立components存放组件的文件夹

    2) 在components中建立*.vue文件

    3 )  在App.vue中导入*.vue (import NavView from './components/Nav.vue')

    4 )  export default{

           components:{

               NavView

          }

         }

    5) 在template中显示

             <div id="app">

                <NavView></NavView>

             </div>

     

    五、路由篇-router

    1) 在需要跳转的地方,加入<router-link>

             to:路由地址,tab是会自动在a标记的上一层生成li,active-class高亮的class设置

                    <router-link to='/home' tag="li" active-class="active">

                        <a href="#">首页</a>

                    </router-link>

    2)  在要显示的地方路由切换内容的地方放入,<router-view>

    3)  在main.js中引入

              import VueRouter from 'vue-router';

              import RouterConfig from './router.config.js'  //配置router的参数文件

              Vue.use(VueRouter);

              new Vue({

                 el: '#app',

                  router,

                  render: h => h(App)

              });

              const router = new VueRouter({

    mode:'history',

     scrollBehavior:() =>({y:0}),  //切换路由的时候,内容都从顶上开始读

        routes:RouterConfig

    })

    4)  在src中建立一个router.config.js文件

    5)  router.config.js完善里面的配置

              import Home from './components/Home.vue'

              import Follow from './components/Follow.vue'

              import Column from './components/Column.vue'

    export default[

        {

            path:'/home',

            component:Home

        },

         {

            path:'/follow',

            component:Follow

        },

         {

            path:'/column',

            component:Column

        },{

            path:'/',

            redirect:'/home'       //默认跳转到首页

        },{

            path:'*',

            redirect:'/home'       //404默认页面

        }

    ]

     

    六、vuex状态管理

    1) 在src下建立store文件夹 √

    2) 在store中建立index.js √

             import Vue from 'vue'

             import Vuex from 'vuex'

             Vue.use(Vuex)

             import mutations from './mutations'

             import actions from './actions'

            export default new Vuex.Store({

        modules:{

            mutations

        },

        //把actions导出去

        actions

    })

    3) 在main.js加入vuex的代码

             import Vue from 'vue'

    import App from './App.vue'

    import VueRouter from 'vue-router'

    import RouterConfig from './router.config.js'

    import store from './store/'   //默认会找到store文件的index.js

    Vue.use(VueRouter)

    const router = new VueRouter({

        mode:'history',

        routes:RouterConfig

    })

    new Vue({

      el: '#app',

      router,

      store,

      render: h => h(App)

    })

    4) 在store中新建一个actions.js

     export default{

        showHeader:({commit})=>{

           //需要有types.js,但是这个项目去掉了types.js

           commit('showHeader')  //commit到了mutations里面去了

        },

        hideHeader:({commit})=>{

           //需要有types.js,但是这个项目去掉了types.js

           commit('hideHeader')  //commit到了mutations里面去了

        },

    }

    5) 在store中新建一个mutations.js

    import getters from './getters'

    const state = {

        header:true //以上来是ture

    }

    const mutations = {

        showHeader(state){

           state.header = true

        },

        hideHeader(state){

           state.header = false

        }

    }

    export default{

        state,

        mutations,

        getters

    }

    6) 在store中新建一个getters.js

             export default{

        headerShow:(state)=>{

           return state.header;

        }

    }

    7) 在要触发的地方,加入代码App.vue

             <NavView v-show="'headerShow'"></NavView>

             import {mapGetters, matpActions} from 'vuex'

             computed:mapGetters([

               'headerShow'

              ]),

    8) 在App.vue中的exprot中加入监听路由的变化的代码

             watch:{

          $route(to,from){

             if(to.path=='/user-info'){

                  //通知actions,状态哪个变量应该消失了为false

                  //需要发起,$store是从main.js里的store来的

                  //然后需要导出到index.js里

                  this.$store.dispatch('hideHeader')   //发出去之后actions.js接收

             }else{

                 this.$store.dispatch('showHeader')

             }

          }

        }

     

    七、数据交互-axios

         1 ) 在main.js进入axios

            import axios from 'axios'

            //关于axios配置

    //1.配置发送请求的信息

    axios.interceptors.request.use(function (config){

       store.dispatch('showLoading')

       return config;

    },function(error){

       return Promise.reject(error)

    })

    //2.配置请求回来

    axios.interceptors.response.use(function (response){

       store.dispatch('hideLoading')

       return response;

    },function(error){

       return Promise.reject(error)

    })

    //把axios对象挂到Vue原型上

    Vue.prototype.$http = axios

    2) 在Home.vue中加入数据交互代码

          export default {

            data(){

                return{

                    arrList:[]

                }

            },

            components:{

                BannerView

            },

            mounted(){

                //获取数据

                this.fetchDate()

            },

            methods:{

                fetchDate(){

                    var _this = this;

                    this.$http.get('src/data/index.data').then(function(res){

                       _this.arrList.push = res.data

                    }).catch(function(err){

                        console.log('Home',err)

                    })

                }

            }

        }

     

    八、文章的详情页制作篇

         1 ) 在home.vue路由跳转代码中加入

               <router-link :to="'/article/'+item.id">

                  <h2>{{item.title}}</h2>

                  <p>{{item.detail}}</p>

               </router-link>

         2)在router.config.js中写上相应的路由配置

                {

                  path:'/article/:id',

                  component:Article

                }

         3)在详情页article.vue接收参数,回显数据

             data(){

              return {

                  articleData:[ ]

              }

          },

          mounted(){

              var reg=//article/(d+)/;

              var id = this.$route.path.match(reg)[1];

              this.fetchData(id); //获取路由的id,放出数据交互函数

          },

          methods:{

              fetchData(id){

                  var _this = this;

                  this.$http.get('../src/data/article.data').then(function(res){

                     console.log(res.data[id-1])

                  }).catch(function(err){

                      console.log('文章详情页',err)

                  })

              }

          }

     3)解决data里有html和样式的情况

    <p v-html="articleData.content"></p>

          4 ) 显示图片

             <img :src="articleData.author_face">

          5)如何处理时间戳

             建立一个文件夹为filters过滤器,在2.0就只能自己写过滤器了

             {{articleData.time | normalTime}}

              filters:{

              normalTime:function(val){

                   var oDate=new Date();

                   oDate.setTime(val);

                   var y=oDate.getFullYear();

                   var m=oDate.getMonth()+1;

                   var d=oDate.getDate();

                   var h=oDate.getHours();

                   var mm=oDate.getMinutes();

                   var s=oDate.getSeconds();

                   return y+'-'+m+'-'+d+' '+h+':'+mm+':'+s;

              }

           }

             因为会有很多的过滤器,所以在filters文件夹下建立一个index.js,和normalTime.js

             index.js

             import {normalTime} from './normalTime'

    module.exports = {

        normalTime

    }

    normalTime.js

    export const normalTime=(time) =>{

        if(time){

           var oDate = new Date();

           oDate.setTime(time)

           var y =oDate.getFullYear();

           var m= oDate.getMonth()+1;

           var d = oDate.getDate();

           var h = oDate.getHours();

           var mm = oDate.getMinutes();

           var s = oDate.getSeconds();

           return y + '-' + m + '-' + d + ' ' + h + ':' + mm + ':' + s;

        }

    }

    在main.js中,全局引入

    import filters from './filters'

     

    九、过渡动画篇

     1 ) 在App.vue中,修改代码

        <transition name="slide-down">

          <router-view></router-view>

        </transition>

     2)在css中加入样式

         .slide-down-enter-active, .slide-down-leave-active {

      transition: all .4s ease;

      opacity: .7;

      transform: translate3d(0, 6rem, 0);

    }

    .slide-down-enter, .slide-down-leave-active {

      opacity: .1;

      transform: translate3d(0, 6rem, 0);

    }

     

    十、语法篇

         1 ) 在style标签中导入其他css    @import './assets/css/index.css'

           (目前同一个文件离引入两个css就报错了)

        解决他在是在main.js,用require(./assets/css/base.css) 全局引用

    2)

     

    十一、项目注意与优化

    1) 第三方库的js或者是css,最好用link和script在index.html中引入,避免打包的时候太大

    2) axios是不能直接use的

    3) index.html引入的连接地址需要写绝对路径

             <script src="http://localhost:8080/src/assets/js/rem.min.js"></script>

    4) 返回按钮的处理

              <a href="#" onclick="window.history.go(-1)">返回</a>

         5 ) 如何在vue里使用jquery

            在main.js中加入 import $ from ‘./jquery.min.js’即可

  • 相关阅读:
    PHP调用WCF提供的方法
    关于git报 warning: LF will be replaced by CRLF in README.md.的警告的解决办法
    vue中引入mui报Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them的错误
    微信小程序报Cannot read property 'setData' of undefined的错误
    Vue那些事儿之用visual stuido code编写vue报的错误Elements in iteration expect to have 'v-bind:key' directives.
    关于xampp中无法启动mysql,Attempting to start MySQL service...的解决办法!!
    PHP的环境搭建
    新手PHP连接MySQL数据库出问题(Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES))
    手机号码、获得当前时间,下拉框,填写限制
    团队作业(五):冲刺总结
  • 原文地址:https://www.cnblogs.com/sybboy/p/7132182.html
Copyright © 2011-2022 走看看