vue2.0之兄弟組件通信及路由

最近在學(xué)習(xí)用vue2.0進(jìn)行項(xiàng)目的開發(fā)删掀,由于接手項(xiàng)目的時(shí)候患膛,項(xiàng)目的完整架構(gòu)已經(jīng)搭建完畢,為了不破壞之前的項(xiàng)目人断,我就采用了比較古老的寫法吭从,說實(shí)話不采用es6的語法去寫,有好多事情都變得比較麻煩了含鳞,不過原理還是一樣的影锈,之前有寫過父與子 和子與父之間的通信,這次主要說的是兄弟組件的通信及vue路由的使用。
項(xiàng)目實(shí)景如下 :

11.png

按照路由----組件通信 ------ 路由切換時(shí)的數(shù)據(jù)加載 方式來進(jìn)行剖析鸭廷,嘎嘎我都不好生意用這個(gè)詞枣抱,嘿嘿,希望你能學(xué)到東西
一辆床、路由
概念:vue中的路由允許我們通過不同的 URL 訪問不同的內(nèi)容看佳晶,針對(duì)我剛剛貼的圖來說。也就是我每次切換tab時(shí)讼载,由于tab對(duì)應(yīng)的url都不同轿秧,就可以通過url來找到對(duì)應(yīng)展示的頁面。
那完成一個(gè)路由功能只需要如下步驟:
1咨堤、引入vue-router,可以通過npm進(jìn)行下載菇篡,在按照如下方式進(jìn)行引入
<script type="text/javascript" src="../../resource/static/vue-router.js"></script>
2.html頁面上進(jìn)行如下定義
(1)、路由切換的入口一喘,點(diǎn)擊就會(huì)觸發(fā)路由事件(暫且這么說><)

            <router-link   to="/group">派單分組</router-link>
             <router-link to="/rule">派單規(guī)則</router-link>
             <router-link to="/extend">派單規(guī)則擴(kuò)展</router-link>
    </div>

vue官網(wǎng)解釋:<router-link> 組件支持用戶在具有路由功能的應(yīng)用中(點(diǎn)擊)導(dǎo)航驱还。 通過 to 屬性指定目標(biāo)地址,默認(rèn)渲染成帶有正確鏈接的 <a> 標(biāo)簽凸克,可以通過配置 tag 屬性生成別的標(biāo)簽.议蟆。另外,當(dāng)目標(biāo)路由成功激活時(shí)萎战,鏈接元素自動(dòng)設(shè)置一個(gè)表示激活的 CSS 類名咐容。
(2)路由觸發(fā)之后,對(duì)應(yīng)的頁面展示
<router-view></router-view>蚂维,對(duì)戳粒,只需要將這個(gè)標(biāo)簽放到你需要放到的地方,就可以看到路由展示的頁面鸟雏,即對(duì)應(yīng)圖中的那個(gè)最大的矩形框享郊。
官方解釋:<router-view> 組件是一個(gè) functional 組件览祖,渲染路徑匹配到的視圖組件孝鹊。這就意味著路由的展示是以組件的形式進(jìn)行的
(3)、定義路由的三個(gè)組件(即與tab項(xiàng)一一對(duì)應(yīng)的)

  <template id="group">  
    ......你的代碼
  </template>
 <template id="rule">  
   ......你的代碼
 </template>
 <template id="extend">  
   ......你的代碼
 </template>

3.js頁面需要進(jìn)行如下定義
(1) 定義進(jìn)行展示的的三個(gè)路由組件(即展示在router-view中的頁面)

  var groups =  Vue.component('group',{
       template:'#group',//對(duì)應(yīng)html頁面的模板
      data:function(){
         return{
          }
     }
  })
 var rules =  Vue.component('group',{
       template:'#group',//對(duì)應(yīng)html頁面的模板
      data:function(){
         return{
          }
     }
  })
 var extends =  Vue.component('group',{
       template:'#group',//對(duì)應(yīng)html頁面的模板
        data:function(){
         return{
          }
     }
  })

(2).進(jìn)行路由配置
//配置路由

    var routes = [ 
        {path:'/group', component :groups},
        {path:'/rule', component:rules},
        {path:'/extend',component:extends},
        //重定向
        {path:'*',redirect:'/group'}
     ]
     //生成路由實(shí)例
    var router = new VueRouter({
        routes
    })

其中path匹配的是router-link to后面對(duì)應(yīng)的路徑
component 對(duì)應(yīng)的即是該路徑下需要在<router-view>展示的組件
然后將這些配置掛載在路由實(shí)列上
(3).將配置好的路由實(shí)列掛載在頁面上

var routerApp =  new Vue({
        el:"#ruleApp",
        router,
        data:{
         }
    })

ok進(jìn)行以上三個(gè)步驟之后就搭建好了路由的基本功能了展蒂,搭建完成后可以跳轉(zhuǎn)又活,那怎么進(jìn)行數(shù)據(jù)的通信了,不急锰悼,我先把接下來的概念介紹了柳骄,最后在來講實(shí)際項(xiàng)目中該如何處理路由之間數(shù)據(jù)的交互....
二 組件間的通信
如果要實(shí)現(xiàn)點(diǎn)擊分頁組件或在搜素框中輸入內(nèi)容就能展示對(duì)應(yīng)的頁面信息,由于我將這幾個(gè)不同的功能劃分為不同的組件箕般,而這幾個(gè)組件的關(guān)系是平行的耐薯,就是所謂的兄弟組件(這個(gè)和在dom元素中定義兄弟元素是一個(gè)道理),所以要想實(shí)現(xiàn)上面的功能,就需要掌握兄弟組件的通信方法曲初,按照習(xí)慣一步一步來看
(1)掌握 vm.$on 体谒、vm.$emit的概念
vm.$on:監(jiān)聽當(dāng)前實(shí)例上的自定義事件。事件可以由vm.$emit觸發(fā)臼婆∈阊鳎回調(diào)函數(shù)會(huì)接收所有傳入事件觸發(fā)函數(shù)的額外參數(shù)“涔樱可以理解為信息的接收源故响。
vm.$emit:觸發(fā)當(dāng)前實(shí)例上的事件,也就是信息的發(fā)起源颁独;
注意兩者都是針對(duì)同一實(shí)列才起作用的彩届,因?yàn)樾值芙M件是不同的實(shí)列,所以為了實(shí)現(xiàn)這種一個(gè)發(fā)起一個(gè)接收的通信方法需要進(jìn)行變通誓酒。
(2)創(chuàng)建一個(gè)中間變量惨缆,來進(jìn)行信息的發(fā)送與接收
vue官方給出的方法:有時(shí)候兩個(gè)組件也需要通信 (非父子關(guān)系)。在簡(jiǎn)單的場(chǎng)景下丰捷,可以使用一個(gè)空的 Vue 實(shí)例作為中央事件總線
即為了滿足同一實(shí)列下的通信限制坯墨,我們采用空的 Vue 實(shí)例來進(jìn)行通信,將.$on和$emit同時(shí)綁定在此實(shí)列上
(3)實(shí)現(xiàn)代碼:
// 創(chuàng)建一個(gè)空的vue實(shí)列
var bus = new Vue()病往;
//在分頁組件中捣染,當(dāng)頁數(shù)或當(dāng)前頁發(fā)生變化時(shí)發(fā)起通信,如下代碼

33.png

//分頁組件發(fā)生變化后,我需要在路由組件中(即當(dāng)前路由下展示的信息停巷,關(guān)于后臺(tái)獲取的信息的代碼都在此組件中完成的:ajax請(qǐng)求中會(huì)包含當(dāng)前頁和展示頁數(shù)及搜索的條件耍攘,所以需要從分頁組件獲取實(shí)時(shí)的頁數(shù)信息)來監(jiān)聽同一實(shí)列發(fā)出的信息源
//在需要獲取信息的組件中通過bus進(jìn)行監(jiān)聽,從而獲取數(shù)據(jù)畔勤,如下代碼蕾各,注意_this為當(dāng)前實(shí)列即var _this = this;否則如果直接使用this就代表了bus這個(gè)實(shí)列而不是當(dāng)前實(shí)列了,注意嘍庆揪。
22.png

其中emit中定義的事件名字要和on監(jiān)聽事件的名字一樣式曲,整體的思路就是當(dāng)我在分頁組件中監(jiān)聽(watch)到當(dāng)前頁和展示頁發(fā)生變化時(shí),就觸發(fā)相應(yīng)的事件(bus.$emit)然后在路由組件中來進(jìn)行事件的監(jiān)聽(bus.$on)缸榛,將監(jiān)聽的數(shù)據(jù)在賦值給當(dāng)前屬性rows和currenPage吝羞,然后觸發(fā)ajax請(qǐng)求進(jìn)行數(shù)據(jù)的更新
總體概況兄弟組件通信的原理:使用$emit和$on進(jìn)行信息的發(fā)送和接受,通過新建空的vue實(shí)列來解決信息發(fā)送和接收必須在同一實(shí)列上的限制内颗。

三钧排、接路由留下的問題,那么路由切換時(shí)如何進(jìn)行數(shù)據(jù)的初始化
vue官方給出了兩個(gè)方案:
1均澳、導(dǎo)航完成之后獲群蘖铩:先完成導(dǎo)航符衔,然后在接下來的組件生命周期鉤子中獲取數(shù)
據(jù)。
2糟袁、導(dǎo)航完成之前獲劝啬濉:導(dǎo)航完成前,在路由的 enter 鉤子中獲取數(shù)據(jù)系吭,在數(shù)據(jù)獲取成功后執(zhí)行導(dǎo)航
意思就是切換導(dǎo)航頁和獲取數(shù)據(jù)信息的順序問題五嫂,兩者都可以,根據(jù)需求來進(jìn)行選擇
我采用的是第一種肯尺,先切換導(dǎo)航頁然后在進(jìn)行ajax的請(qǐng)求沃缘,看代碼
//初始化
created () {
// 組件創(chuàng)建完后獲取數(shù)據(jù),
// 此時(shí) data 已經(jīng)被 observed 了
this.fetchData()
}
//如果路由改變進(jìn)行數(shù)據(jù)的加載


44.png

//觸發(fā)的ajax請(qǐng)求


55.png

好了则吟,我這也許講的不是很深槐臀,但是我覺得講的還是詳細(xì)的,只看官網(wǎng)不去自己實(shí)踐一把氓仲,感覺還是不好理解水慨,希望我的經(jīng)驗(yàn)?zāi)軒椭愀玫睦斫?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市敬扛,隨后出現(xiàn)的幾起案子晰洒,更是在濱河造成了極大的恐慌,老刑警劉巖啥箭,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谍珊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡急侥,警方通過查閱死者的電腦和手機(jī)砌滞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坏怪,“玉大人贝润,你說我怎么就攤上這事÷料” “怎么了打掘?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)捉超。 經(jīng)常有香客問我胧卤,道長(zhǎng)唯绍,這世上最難降的妖魔是什么拼岳? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮况芒,結(jié)果婚禮上惜纸,老公的妹妹穿的比我還像新娘叶撒。我一直安慰自己,他們只是感情好耐版,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布祠够。 她就那樣靜靜地躺著,像睡著了一般粪牲。 火紅的嫁衣襯著肌膚如雪古瓤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天腺阳,我揣著相機(jī)與錄音落君,去河邊找鬼。 笑死亭引,一個(gè)胖子當(dāng)著我的面吹牛绎速,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焙蚓,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纹冤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了购公?” 一聲冷哼從身側(cè)響起萌京,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宏浩,沒想到半個(gè)月后枫夺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绘闷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年橡庞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片印蔗。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扒最,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出华嘹,到底是詐尸還是另有隱情吧趣,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布耙厚,位于F島的核電站强挫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏薛躬。R本人自食惡果不足惜俯渤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望型宝。 院中可真熱鬧八匠,春花似錦絮爷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抡四,卻和暖如春柜蜈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背指巡。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工跨释, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厌处。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓鳖谈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阔涉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缆娃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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