vue-router筆記1

$ cnpm install vue-router --save

vue的基本用法就是,分割成好多個(gè)組件问潭,
每個(gè)組件有 data,template,methods,computed,等等潜慎, 還有 components
這些組件都需要掛載在 html上

根組件比較簡(jiǎn)單鸥鹉, 就是在 new Vue({})的時(shí)候布持,可以用el 字段綁定掛載,
或者生成實(shí)例后钓账,new Vue({}).$mount("app") 來(lái)掛載

而其他組件則需要從根組件開始碴犬, 一個(gè)一個(gè)用標(biāo)簽的方式進(jìn)行掛載,
(或者叫渲染梆暮?插入服协?)

然后就會(huì)出現(xiàn)一個(gè)樹狀結(jié)構(gòu),每個(gè)組件的最基本關(guān)系都是 父子關(guān)系啦粹。

父子關(guān)系的數(shù)據(jù)傳遞是靠 props 和 自定義事件偿荷, 以及slot來(lái)解決的。

為了方便非父子間組件的數(shù)據(jù)傳遞唠椭, 有了vue-x, store,state.

但是接觸了vue-router之后發(fā)現(xiàn)跳纳,
掛載,或者渲染組件的時(shí)候泪蔫,不一定要用父子間關(guān)系,
而是根據(jù)路由進(jìn)行配置喘批。

當(dāng)然最后的掛載(渲染撩荣?铣揉,插入?)餐曹,也是需要 <router-view> 這個(gè)標(biāo)簽來(lái)實(shí)現(xiàn)的逛拱。

但你發(fā)現(xiàn),沒有了父子關(guān)系之后台猴,
他要怎么傳遞數(shù)據(jù)呢朽合?
似乎是用url,除了url,和vue-x 還有別的方式嗎饱狂?

還有一個(gè)問題是曹步,既然組件可以用父子間關(guān)系來(lái)引入,也可以用router來(lái)引入休讳,
那么什么時(shí)候用父子間比較好讲婚?,什么時(shí)候用router引入比較好俊柔?

以上作為對(duì)vue的一點(diǎn)感受筹麸, 外加帶著疑問去學(xué)一下視頻。

router.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import About from '@/components/About'

Vue.use(Router)// 為了注入?

export default new Router({
  routes: [
    {
      path: '/home',
      name: 'Home',
      component: Home
    },
    {
      path: '/about',
      name: 'About',
      component: About
    }
  ]
})

想成所有組件都要在routes進(jìn)行注冊(cè)?

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,//必須要在根實(shí)例上注入.
  components: { App },
  template: '<App/>'
})

App.vue

<template>
  <div id="app">
    <router-link to="/home">home</router-link>
    <router-link to="/about">about</router-link>
    <a href="#/home">home</a>
    <a href="#/about">about</a>
    
    
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

用a標(biāo)簽也可以跳轉(zhuǎn)到相應(yīng)的組件,
只要url相應(yīng)的改變就可以


image.png

mode字段,

export default new Router({
   mode : "history",// 用的是html的history
  routes: [
   ...
  ]
})
<router-link to="/home">home</router-link> // 不刷新跳轉(zhuǎn)
    <router-link to="/about">about</router-link> // 不刷新跳轉(zhuǎn)
    <a href="/home">home</a>//刷新跳轉(zhuǎn)
    <a href="/about">about</a>// 刷新跳轉(zhuǎn)

......................
export default new Router({
   mode : "hash",// 默認(rèn)就是哈希模式
  routes: [
   ...
  ]
})
<router-link to="/home">home</router-link> // 不刷新跳轉(zhuǎn)
    <router-link to="/about">about</router-link> // 不刷新跳轉(zhuǎn)
    <a href="#/home">home</a>//不刷新跳轉(zhuǎn)
    <a href="#/about">about</a>//不刷新跳轉(zhuǎn)

用bind語(yǔ)法

    <router-link :to="{path : '/home'}">home</router-link>
    <router-link :to="{path:'/about'}">about</router-link>

這樣就不用寫死了?

我們發(fā)現(xiàn),這個(gè)路由是通過(guò)#,來(lái)實(shí)現(xiàn)的,
或者說(shuō)是根據(jù)url來(lái)實(shí)現(xiàn)的

URL 的兩種風(fēng)格
RESTful : a/b/c/d
強(qiáng)調(diào)的是層次感?
非RESTful : ?key=value&key=value
強(qiáng)調(diào)的是數(shù)據(jù)?

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

App.vue

<template>
  <div id="app">
    <router-link :to="{path : '/home'}">home</router-link>
    <router-link :to="{path:'/about'}">about</router-link>
    <router-link :to="{name : 'Room',params : {id : 666}, query : {kw : 'wo'}}">room</router-link>
    <router-link v-for="item in ids" :to="{name : 'Room',params : {id : item.id}}">{{item.name}}</router-link>
    
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App',
  data () {
    return {
      ids : [
        {
          id : 111,
          name : "渡一公開課"
        },
        {
          id : 222,
          name : "渡一就業(yè)班"
        },
        {
          id : 333,
          name : "渡一進(jìn)階班"
        }
      ]
    }
  }
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

router.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import About from '@/components/About'
import Room from '@/components/Room'
import Err from '@/components/Err'
import Hello from '@/components/Hello'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/home',
      name: 'Home',
      component: Home
    },
    {
      path: '/about/:di',
      name: 'About',
      component: About
    },
    {
      path: '/room/:id?',// 這里如果沒有 ? 那 /room就不會(huì)渲染
      name: 'Room',
      component: Room
    },
    {
      path: '/err',
      name: 'Err',
      component: Err
    },
    {
      path: '/',
      name: 'Hello',
      component: Hello
    },
    {
      path: '*',// 初級(jí)的導(dǎo)航守衛(wèi)
      redirect (to) {
        if (to.path == "/abc") {
            return "/home"
        }else {
          return "/err"
        }
      }
    },
  ]
})

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

Room.vue

<template>
  <div class="wrapper">
    <div v-if="!$route.params.id">歡迎來(lái)到騰訊課堂</div>
    <div v-else>當(dāng)前的房間號(hào)為 :{{$route.params.id}} 當(dāng)前房間名為{{roomName}}</div>
  </div>
</template>

<script>
  
  
    export default {
      name : "Room",
      data () {
        return {
          roomName : ""
          
        }
      },
      created () {
        if (this.$route.params.id) {// 模擬根據(jù)id從后臺(tái)獲取房間名(數(shù)據(jù))
            setTimeout(() => this.roomName = "渡一",3000);
        }
      },
      
      watch : {
        $route(to,from) {
          console.log(to.params.id,from.params.id);
        }
      }
    }
</script>

<style>
  
</style>

其他組件就是基本模板.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雏婶,一起剝皮案震驚了整個(gè)濱河市物赶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌留晚,老刑警劉巖酵紫,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異倔丈,居然都是意外死亡憨闰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門需五,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鹉动,“玉大人,你說(shuō)我怎么就攤上這事宏邮≡笫荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蜜氨,是天一觀的道長(zhǎng)械筛。 經(jīng)常有香客問我,道長(zhǎng)飒炎,這世上最難降的妖魔是什么埋哟? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上赤赊,老公的妹妹穿的比我還像新娘闯狱。我一直安慰自己,他們只是感情好抛计,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布哄孤。 她就那樣靜靜地躺著,像睡著了一般吹截。 火紅的嫁衣襯著肌膚如雪瘦陈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天波俄,我揣著相機(jī)與錄音晨逝,去河邊找鬼。 笑死弟断,一個(gè)胖子當(dāng)著我的面吹牛咏花,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阀趴,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昏翰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了刘急?” 一聲冷哼從身側(cè)響起棚菊,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叔汁,沒想到半個(gè)月后统求,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡据块,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年码邻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片另假。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡像屋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出边篮,到底是詐尸還是另有隱情己莺,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布戈轿,位于F島的核電站凌受,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏思杯。R本人自食惡果不足惜胜蛉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧誊册,春花似錦奈梳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)漆撞。三九已至殴泰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浮驳,已是汗流浹背悍汛。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留至会,地道東北人离咐。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奉件,于是被迫代替她去往敵國(guó)和親宵蛀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容