2020-09-02 Vue 路由

路由

    1. 前端路由:根據(jù)不同的path,顯示不同的組件
    1. 漸進(jìn)性框架:
    • (1). 路由功能 是以 vue 插件的形式 灌入Vue函數(shù)上 (vue.js核心包撞羽,沒有路由)
    • (2). 路由功能 單獨(dú) 拿出來 vueRouter(插件的形式灌入Vue構(gòu)造函數(shù))
    • (3). 路由 用于構(gòu)建 spa (單頁面應(yīng)用) 應(yīng)用

分析單頁面應(yīng)用的優(yōu)劣勢

    1. 優(yōu)勢: 單頁面應(yīng)用祟印,在我們“頁面”(地址改變)同波,不會重新加載 另一個(gè)html撑教,只是切換路由顯示。隱藏侮东,頁面切換速度以及 不同頁面加載很快
    1. 劣勢: 對于seo不友好,無法抓取頁面結(jié)構(gòu)(解決方式利用vue圈盔,ssr服務(wù)端渲染)

https://router.vuejs.org/zh/

  <!-- 在 Vue 后面加載 vue-router,它會自動(dòng)安裝的: -->
  <script src="./js/vue.js"></script>
  <script src="./js/vue-router.js"></script>
</head>
<body>
  <div id="app">
    <h1>Hello App!</h1>
    <!-- 使用 router-link 組件來導(dǎo)航. -->
    <!-- 通過傳入 `to` 屬性指定鏈接. -->
    <!-- <router-link> 默認(rèn)會被渲染成一個(gè) `<a>` 標(biāo)簽 -->
    <!-- 通過設(shè)置tag屬性來改變r(jià)outer-link的默認(rèn)樣式 -->
    <router-link to="/home" tag="button">Go To Home</router-link>
    <router-link to="/news">Go To News</router-link>


    <!-- 想要顯示對應(yīng)的路由苗桂,還需要路由出口 -->
    <!-- 路由匹配到的組件將渲染在這里 -->
    <router-view></router-view>
  </div>

  <template id="home">
    <h2>Home頁組件</h2>
  </template>

  <template id="news">
    <h2>News頁組件</h2>
  </template>
</body>
<script>

  //定義組件,路由切換時(shí)顯示對應(yīng)的組件
  let Home = {
    template:'#home'
  }

  let News = {
    template:'#news'
  }

  //定義路由药磺,每個(gè)路由都應(yīng)該映射一個(gè)組件。有path屬性煤伟,component是對應(yīng)的組件
  const routes = [
    {
      path:'/home',
      component:Home
    },
    {
      path:'/news',
      component:News
    }
  ]

  //創(chuàng)建路由實(shí)例癌佩,然后傳routes配置規(guī)則
  const router = new VueRouter({
    routes //縮寫,相當(dāng)于routes:routes,在這里使用定義好的路由規(guī)則
  })

  // 通過注入路由器便锨,我們可以在任何組件內(nèi)通過 this.$router 訪問路由器围辙,
  // 也可以通過 this.$route 訪問當(dāng)前路由:


  let vm = new Vue({
    el:'#app',
    router  //這里將路由掛載到實(shí)例上
  })
</script>

動(dòng)態(tài)路由

  <style>
    .router-link-active {
      background: cadetblue;
    }
  </style>
  <script src="./js/vue.js"></script>
  <script src="./js/vue-router.js"></script>
</head>
<body>
  <div id="app">
    <!-- 出口 -->
    <router-view></router-view>

    <!-- 使用 router-link 組件來導(dǎo)航. -->
    <!-- 通過傳入 `to` 屬性指定鏈接. -->
    <!-- <router-link> 默認(rèn)會被渲染成一個(gè) `<a>` 標(biāo)簽 -->
    <!-- 通過設(shè)置tag屬性來改變r(jià)outer-link的默認(rèn)樣式 -->
    <router-link to="/home" tag="button">Go To Home</router-link>
    <router-link to="/news">Go To News</router-link>
  </div>

  <template id="home">
    <h2>Home頁組件</h2>
  </template>

  <template id="news">
    <h2>News頁組件
      <router-link to="/news/1"> 
        我是新聞1
      </router-link>
      <router-link to="/news/2">
        我是新聞2
      </router-link>
      <router-link to="/news/3">
        我是新聞3
      </router-link>
    </h2>
  </template>
</body>
<script>
  //定義組件,路由切換時(shí)顯示對應(yīng)的組件
  let Home = {
    template:'#home'
  }

  let News = {
    template:'#news'
  }

  //匹配404頁面
  let NotFound = {
    template:`
      <h1>404</h1>
    `
  }

  //定義一個(gè)新聞詳情子組件
  let NewsSon = {
    template:`
      <div>
        <h2>新聞詳情</h2>  
      </div>
    `,
    mounted(){
      //在這里獲取到動(dòng)態(tài)路由傳的參數(shù),及:id
      console.log(this.$route.params.id);
    }
  }

  //定義路由
  const routes = [
    {
      path:'/news',
      component:News
    },
    {
      //重定向
      path:'/',
      redirect:'/news'
    },
    {
      // 動(dòng)態(tài)路徑參數(shù) 以冒號開頭
      path:'/news/:id',
      component: NewsSon
    },
    {
      //匹配404頁面放案,該路由最好放在最末尾
      path:'*',
      component:NotFound
    }
  ]

  //路由實(shí)例化
  const router = new VueRouter({
    routes  //定義路由規(guī)則
  })

  let vm = new Vue({
    el:"#app",
    router  //掛載路由
  })

  /*
    hash路由
      根據(jù) 地址 的hash值得變化 來 切換不同組件
      window.addEvenetListener("hashchange",()=>{
        // 監(jiān)聽地址欄  hash值變化
      })
    */ 
</script>

監(jiān)聽動(dòng)態(tài)路由參數(shù)變化以及匹配404頁面和重定向

    1. 監(jiān)聽動(dòng)態(tài)路由參數(shù)變化
  //定義一個(gè)新聞詳情子組件
  let NewsSon = {
    template:`
      <div>
        <h2>新聞詳情</h2>  
      </div>
    `,
    mounted(){
      //在這里獲取到動(dòng)態(tài)路由傳的參數(shù)姚建,及:id
      console.log(this.$route.params.id);
    },
    watch:{
      //復(fù)用組件時(shí),想對路由參數(shù)的變化作出響應(yīng)的話吱殉,watch (監(jiān)測變化) $route 對象:
      $route(to,from){
        console.log(to); //目標(biāo)路由
        console.log(from); //上一個(gè)路由
      }
    }
  }
    1. 匹配404頁面和路由重定向
  let News = {
    template: `
        <div>
          <h1>
            新聞頁
          </h1>  
        </div>
      `
  }

//匹配404頁面
  let NotFound = {
    template:`
      <h1>404</h1>
    `
  }

  // 定義路由
  const routes = [
    {
      path:'/',
      //重定向到news頁
      redirect:'/news'
    },
    {
      path:'/news',
      //命名路由即給路由定義個(gè)name
      name:'新聞',
      component:News
    },
    {
      path:'/news/:id',
      component:NewsSon
    },
    {
      path:'*',
      component:NotFound
    }
  ]

路由嵌套

  • 重點(diǎn):
    • 1掸冤,二級路由的path 最好 包含一級路由path
    • 2,一定在要 二級路由對于的一級路由 模板 中 寫出口 router-view
  • 案例分析:
 <style>
    .router-link-active {
      background: cadetblue;
    }

    .router-link-exact-active {
      background: tan;
    }
  </style>
  <script src="./js/vue.js"></script>
  <script src="./js/vue-router.js"></script>
</head>

<body>
  <div id="app">
    <router-link tag="button" to="/home">home頁</router-link>
    <router-link tag="button" to="/news">新聞頁</router-link>

    <!-- 出口 -->
    <router-view></router-view>
  </div>

  <template id="news"> 
    <div>
      <router-link to="/news/native">國內(nèi)新聞</router-link>
      <router-link to="/news/abroad">國外新聞</router-link>
      <h1>
        我是news頁
        <!-- 這里也需要路由的出口標(biāo)簽 -->
        <router-view></router-view>
      </h1>  
    </div>
  </template>
</body>
<script>

  //定義組件
  let Home = {
    template: `
      <div>
        <h1>
          我是home頁  
        </h1>  
      </div>
    `
  }

  let News = {
    template: '#news'
  }

  //定義兩個(gè)新聞子組件
  const NativeNews = {
    template:`
      <div>
        <h2>國內(nèi)新聞?wù)故?lt;/h2>  
      </div>
    `
  }

  const AbroadNews = {
    template:`
      <div>
        <h2>國外新聞?wù)故?lt;/h2>  
      </div>
    `
  }


  //定義路由
  const routes = [
    {
      path:'/',
      //重定向到home頁
      redirect:'/home'
    },
    {
      path:'/home',
      component:Home
    },
    {
      path:'/news',
      component:News,
      //新聞頁里面有子路由
      children:[
        {
          path:'/news/native',
          component:NativeNews
        }, 
        {
          path:'/news/abroad',
          component:AbroadNews
        }
      ]
    },
  ]


  //路由實(shí)例化
  const router = new VueRouter({
    routes
  })


  let vm = new Vue({
    el: '#app',
    router
  })
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末友雳,一起剝皮案震驚了整個(gè)濱河市稿湿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌押赊,老刑警劉巖饺藤,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異流礁,居然都是意外死亡涕俗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門神帅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來再姑,“玉大人,你說我怎么就攤上這事枕稀⊙玻” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵萎坷,是天一觀的道長凹联。 經(jīng)常有香客問我,道長哆档,這世上最難降的妖魔是什么蔽挠? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上澳淑,老公的妹妹穿的比我還像新娘比原。我一直安慰自己,他們只是感情好杠巡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布量窘。 她就那樣靜靜地躺著,像睡著了一般氢拥。 火紅的嫁衣襯著肌膚如雪蚌铜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天嫩海,我揣著相機(jī)與錄音冬殃,去河邊找鬼。 笑死叁怪,一個(gè)胖子當(dāng)著我的面吹牛审葬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奕谭,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼涣觉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了血柳?” 一聲冷哼從身側(cè)響起旨枯,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎混驰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皂贩,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栖榨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了明刷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婴栽。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辈末,靈堂內(nèi)的尸體忽然破棺而出愚争,到底是詐尸還是另有隱情,我是刑警寧澤挤聘,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布轰枝,位于F島的核電站,受9級特大地震影響组去,放射性物質(zhì)發(fā)生泄漏鞍陨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一从隆、第九天 我趴在偏房一處隱蔽的房頂上張望诚撵。 院中可真熱鬧缭裆,春花似錦、人聲如沸寿烟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筛武。三九已至缝其,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畅铭,已是汗流浹背氏淑。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硕噩,地道東北人假残。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像炉擅,于是被迫代替她去往敵國和親辉懒。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359