zoukankan      html  css  js  c++  java
  • 2/3 初次搭建 Vue 项目遇到的问题汇总

      今天步子扯开的有点大

      初步看了一下 Vue-router 然后就开始用脚手架 Vue-cli 来搭建第一个项目了

      遇到的问题确实很多,还有一些疑问,自己查资料都大致解决了一部分

      ( 推荐还是理解了一部分的有缘人 进行阅读理解 如果有错 请大家指正 )

      按照流水账来说一下 首先是

    Vue-router 

      这里先简单谈一下,我的理解

         根据 url 来 相应不同的组件 以达到 SPA 的效果 ( Single Page Application )

      这有一例实例代码

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4   <title></title>
     5 </head>
     6 <body>
     7 <script src="https://unpkg.com/vue/dist/vue.js"></script>
     8 <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
     9 <div id="app">
    10   <ul>
    11     <li><router-link to="/">Home</router-link></li>
    12     <li>
    13       <div><router-link to="/about">About</router-link></div>
    14       <ul>
    15         <!-- 3. 使用嵌套路由 -->
    16         <li><router-link to="/about/author">About - Author</router-link></li>
    17         <li><router-link to="/about/email">About - Email</router-link></li>
    18       </ul>
    19     </li>
    20   </ul>
    21   <router-view></router-view>
    22 </div>
    23 <script type="text/javascript">
    24   let Home = { template: '<h1>This is Home!</h1>' } // Home组件
    25   let About = { // About组件
    26     template: '<div>' + 
    27     '<h1>This is About!</h1>' + 
    28     '<router-view></router-view>' +  // 1. 嵌套的动态视图区
    29     '</div>'
    30   }
    31   let Author = { template: '<p>Author: lonelydawn</p>' } // Author组件
    32   let Email = { template: '<p>Email: lonelydawn@sina.com</p>' } // Email组件
    33   let routes = [ // 定义路由规则, 每一个路由规则应该映射一个视图组件
    34     { path: '/', component: Home }, // compoent 就是对应 path 的展示的组件
    35     { 
    36       path: '/about', 
    37       component: About,
    38       children: [ // 2. 嵌套子路由
    39         { path: 'author', component: Author },
    40         { path: 'email', component: Email }
    41       ]
    42     }
    43   ]
    44   let router = new VueRouter({ // 创建VueRouter实例, 并传入routes配置
    45     routes
    46   })
    47   let app = new Vue({
    48     router
    49   }).$mount('#app')
    50 </script>
    51 </body>
    52 </html>

      其实就是

        " / " 对应的是 组件 home 

        " /about " 对应的是 组件 About

          " /about/author " 对应的是 组件 Author

          " /about/email " 对应的是 组件 Email

      都是调用关系

    Vue-cli

      刚才写的一大堆没了

      简单写一下

      1.打开控制台输入

        cnpm install vue-cli -g

      2.查看是否安装成功

        vue  --version

      3.进入想放置的文件目录 初始化项目

        vue init webpack my-project

          (  推荐不选择 ESlint 然后是 unit test 和 e2e 不选 )

      4.还是想放置的目录 进行安装项目依赖

        cnpm install 

      5.构建开发版本 ( 按照提示打开浏览器查看 )

        npm install 

      6.再打开一个控制台 进行构建生产版本

        npm run build

      这里主要的问题就是没有选择目录创建,一直找不到依赖 ( 我也没装 ) 

      之后把项目放到 VScode 里面就成功了

     Vuex

      承接上文,我们如果想安装状态控制的话

      7.还是在原来的目录

        cnpm install  vuex --save-dev

      8.创建相应的文件夹文件( 创建 store 文件夹 )

           

        index.js 是出口 引用了 modules 里面的每一个模块 ( counter 、 test )

      依据 counter 的例子进行梳理

     1 export default {
     2     namespaced: true,
     3     state: {
     4         count: 0
     5     },
     6     getters: {
     7         tenTimesCount (state, getters, rootState, rootGetters) {
     8             console.log(state, getters, rootState, rootGetters)
     9             return state.count * 10
    10         }
    11     },
    12     mutations: {
    13         addCount (state,num) {
    14             state.count += num || 1
    15         }
    16     },
    17     actions: {
    18         addCountAsync (context,num) {
    19             setInterval(() => {
    20                 if (context.state.count < 2000) {
    21                     context.commit('addCount', num || 100)
    22                 }
    23             }, num || 100);
    24         }
    25     }
    26 }
    counter.js

      在看书的时候,对于模块 counter 中的这一部分有些疑问,书上没有解释清楚

      

       起初,对于绿色这一部分,我是不知道怎么来的,也没有定义过,经过看官网资料,发现,这个参数是默认的,后面的参数 ( 红色 )

      被叫做 提交载荷

      

      同理 Actions 的 context  也是如此

      

       然后就是我们的额外参数

      

       这个问题搞清楚之后,又来了一个 

      

       在vue组件引用的时候,

       中间看不懂

      看了很多博客才明白

        mapState 辅助函数 相当于 将 某个 组件的 state 的属性给 构造 出来  返回一个对象

      依次类推

      ........

      我们可以这样理解

        mapState ( ["count"] ) 返回的是 { count ( ) { return this.$store.state.count } } 一个对象
        所以,辅助函数会方便我们来进行操作,比如直接
     
        computed : mapState ( ["count"] )
        就相当于
        computed : {
          count ( ) { return this.$store.state.count }
         }
     

      但是返回的终究是 一个对象  如果我想再添点其他的属性,就没法了

      这个时候,就可以利用 ES6 的新特性

      对象展开运算符  ... 

        一个例子 [ ... [ 1, 2, 3 ] ,4 ,5 ] 为 [ 1,2,3,4,5]

        

       依照这个,我们可以

      

       ( 只是举一个例子 )

      然后是补充的一个问题,因为发现 getters 的默认参数有点神奇, 于是做了一些研究

      就是加了一个 test 模块

      

       原来的 counter  模块

      

       然后查看 console

      

       其实这里就发现了,rootState 其实就是 index.js 输出 js 的这个对象( module ) ,rootGetters 其实就是这个 module 对象的属性 getters 集合的一个对象 

      


    总结

      还是看起来打脑壳,只要看懂了还好

      但是不是很深入地去了解

      继续加油

        

    Let it roll
  • 相关阅读:
    【转载】总结一下Android中主题(Theme)的正确玩法
    Android获唯一标识
    AS问题解决系列3—iCCP: Not recognizing known sRGB profile
    AS问题解决系列1—Unable to execute DX错误
    Android Studio Error2
    Android Error
    NAT简单介绍
    redis缓存工具Jedis进行跨jvm加锁(分布式应用)--不幸暂弃用--能够做第三方锁使用
    工作总结1.怎样高效跟客户确定需求?
    Sqoop处理Clob与Blob字段
  • 原文地址:https://www.cnblogs.com/WaterMealone/p/14370420.html
Copyright © 2011-2022 走看看