一、Vue-Cli2

1.1runtime-compiler和runtime-only

  • runtime-compiler:template->ast->render->vdom->ui
  • runtime-only:render->vdom->ui 性能高,代碼量少

二、Vue-Cli3

2.1認(rèn)識Vue CLI3

vue-cli 3 與 2 版本有很大區(qū)別

vue-cli 3 是基于 webpack 4 打造,vue-cli 2 還是 webapck 3
vue-cli 3 的設(shè)計原則是“0配置”,移除的配置文件根目錄下的,build和config等目錄
vue-cli 3 提供了 vue ui 命令,提供了可視化配置,更加人性化
移除了static文件夾,新增了public文件夾,并且index.html移動到public中

三、Vue-router

3.1認(rèn)識路由

  • 后端渲染(jsp):服務(wù)器直接生產(chǎn)渲染好對應(yīng)的HTML頁面, 返回給客戶端進(jìn)行展示
  • 后端路由:當(dāng)我們頁面中需要請求不同的路徑內(nèi)容時, 交給服務(wù)器來進(jìn)行處理, 服務(wù)器渲染好整個頁面, 并且將頁面返回給客戶頓
  • 前端渲染:后端只提供API來返回數(shù)據(jù) ,前端通過Ajax獲取數(shù)據(jù), 并且可以通過JavaScript將數(shù)據(jù)渲染到頁面中
  • 前端路由:改變URL,但是頁面不進(jìn)行整體的刷新,一個URL對應(yīng)一個組件在頁面上渲染

3.2前端路由的規(guī)則

  • URL的hash:通過直接賦值location.hash來改變href, 但是頁面不發(fā)生刷新

  • HTML5的history模式:

    • history.pushState({},'','/foo')

    • history.replaceState({},'','/foo')

    • history.back()

    • history.forward()

    • history.go(-1)等價于history.back()

      history.go(1)等價于history.forward()

3.3Vue-router基礎(chǔ)

  • 使用vue-router的步驟:

    • 第一步: 創(chuàng)建路由組件

      <template>
        <div>
          <h2>我是關(guān)于</h2>
          <p>哈哈哈</p>
        </div>
      </template>
      
      <script>
        export default {
          name: "About"
        }
      </script>
      
      <style scoped>
      
      </style>
      
      
    • 第二步: 配置路由映射: 組件和路徑映射關(guān)系

      /*配置路由相關(guān)的信息*/
      import VueRouter from 'vue-router'
      import Vue from 'vue'
      import Home from '../components/Home'
      import About from '../components/About'
      //1.通過Vue.use(插件),安裝插件
      Vue.use(VueRouter);
      
      //2.創(chuàng)建路由對象
      const router = new VueRouter({
        //配置路由和組件之間的關(guān)系
        routes: [
          {
            path:'/home',
            component:Home
          }, {
            path:'/about',
            component:About
          }
        ]
      });
      //3.將router對象傳入vue實例中
      export default router;
      
      
    • 第三步: 使用路由: 通過router-link和router-view

      <template>
        <div id="app">
          <router-link to="/home">首頁</router-link>
          <router-link to="/about">關(guān)于</router-link>
          <router-view></router-view>
        </div>
      </template>
      

router-link: 該標(biāo)簽是一個vue-router中已經(jīng)內(nèi)置的組件, 它會被渲染成一個a標(biāo)簽.

router-view: 該標(biāo)簽會根據(jù)當(dāng)前的路徑, 動態(tài)渲染出不同的組件.

3.4細(xì)節(jié)處理

  • redirect

    默認(rèn)情況下, 進(jìn)入網(wǎng)站的首頁, 我們希望router-view渲染首頁的內(nèi)容.但是我們的實現(xiàn)中,默認(rèn)沒有顯示首頁組件, 必須讓用戶點擊才可以.解決辦法

    {
          path:'',
          redirect:'/home'
        }
    /*我們在routes中又配置了一個映射. 
    path配置的是根路徑: /
    redirect是重定向, 也就是我們將根路徑重定向到/home的路徑下, 這樣就可以得到我們想要的結(jié)果了.
    */
    
  • history

    改變路徑的方式有兩種:URL的hash,HTML5的history,默認(rèn)情況下, 路徑的改變使用的URL的hash.如果希望使用HTML5的history模式

    const router = new VueRouter({
      routes: [
        ...
      ],
      mode:'history'//=>路徑的改變方式
    });
    
  • router-link補充

to, 用于指定跳轉(zhuǎn)的路徑.
tag可以指定router-link之后渲染成什么標(biāo)簽
replace不會留下history記錄, 所以指定replace的情況下, 后退鍵返回不能返回到上一個頁面中
active-class: 當(dāng)router-link對應(yīng)的路由匹配成功時, 會自動給當(dāng)前元素設(shè)置一個router-link-active的class,也可以在路由對象中添加默認(rèn)的linkActiveClass屬性

  • 路由代碼跳轉(zhuǎn)

    有時候, 頁面的跳轉(zhuǎn)可能需要執(zhí)行對應(yīng)的JavaScript代碼, 這個時候, 就可以使用第二種跳轉(zhuǎn)方式了

<div id="app">
    ...
<button @click="homeClick">首頁</button>
    <button @click="aboutClick">關(guān)于</button>
...
<script>
export default {
  name: 'App',
  methods:{
    homeClick(){
      this.$router.replace('/home');
    },
    aboutClick(){
      this.$router.replace('/about');
    }
  }
}
</script>