最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue項目三級聯(lián)動路由跳轉與傳參的思路詳解

 更新時間:2024年08月22日 10:23:21   作者:簡?。單  
這篇文章主要介紹了Vue項目三級聯(lián)動的路由跳轉與傳參的思路詳解,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

三級聯(lián)動組件的路由的跳轉與傳參

三級聯(lián)動,用戶可以點擊的:一級分類、二級分類和三級分類
以商城項目為例,Home模塊跳轉到Search模塊,以及會把用戶選中的產品(產品名字、產品ID)在路由跳轉的時候,進行傳遞。

路由跳轉

  • 聲明式導航:router-link
  • 編程式導航:push | replace

聲明式導航

  • router-link 來替換a標簽跳轉(不推薦)

  • 但是當鼠標進入三級聯(lián)動,上下滑動的時候,會出現卡頓現象

原因:router-link是一個組件,當服務器的數據返回后,循環(huán)出很多router-link組件創(chuàng)建實例1000+,創(chuàng)建組件實例的時候,一瞬間創(chuàng)建很多組件很耗內存,因此出現卡頓現象。

編程時導航(常使用)

綁定點擊事件

點擊事件一個方法

  • 點擊確實能夠實現跳轉,而且沒有卡頓的現象。
  • 但是這種方法也不是最好的
  • 原因是:因為每一個a標簽都綁定了一個@click函數,因為這個三級聯(lián)動,要循環(huán),可能會有1000+次,所以相當于綁定1000+@click回調函數,那么1000個回調函數。

事件委派+編程式導航(最佳方法)
事件委派:把原來加給子元素身上的事件綁定在父元素身上,就是把時間委派給父元素。比如說,鼠標點擊事件,本來頁面上有很多的鼠標點擊事件,需要一個個的去寫實現函數,但是如果你把鼠標點擊事件交給上司來完成,那么就是鼠標點擊那里的時候,就相當于上司找對應的下屬來完成此事件,而不像前面一個個的去找實現函數。

<ul id="ul1" >
<li>111</li>
<li>222</li>
<li>333</li>
<li>444</li>
</ul>
如果給每個li添加點擊事件:
var li=document.getElementsByTagName('li');
function A(){
    alert(li.innerHTML);
};
li.click=A;

但是事件委派有兩個弊端:很耗費資源;如果后期動態(tài)添加li,不會擁有這個彈出事件。
事件委派+編程式導航 實現三級聯(lián)動

利用事件的委派

  • 在三級聯(lián)動的父元素的div綁定一個@click=“goSearch”
<!-- 利用事件委派和編程式導航實現路由跳轉和傳參-->
<div class="all-sort-list2" @click="goSearch">

methods這樣寫:

methods:{
   goSearch(){
     this.$router.push('/search');
   }
}

此時實現了跳轉search的效果。

  • 但是新問題:第一個問題:怎么知道點擊的是a標簽?因為三級聯(lián)動父div里面有a,h3,dt,dl,是把全部子節(jié)點的事件委派給父親節(jié)點。第二個問題:即使能確定點擊的是a標簽,如何區(qū)分點擊的是一級、二級、三級的a標簽?
  • event是事件對象,可以獲取到當前觸發(fā)事件的節(jié)點

解決方法: 把子節(jié)點當中a標簽,加上自定義屬性data-categoryName,其余的子節(jié)點是沒有的;一級、二級、三級分類的a標簽也通過添加自定義屬性來判斷:

<div class="all-sort-list2" @click="goSearch">
   <div
     class="item"
     v-for="(c1, index) in categoryList"
     :key="c1.categoryId"
     @mouseenter="changeIndex(index)"
     :class="{ cur: currentIndex === index }"
   >
     <h3>
       <!-- 給a標簽添加自定義屬性 -->
       <a
         :data-categoryName="c1.categoryName"
         :data-category1Id="c1.categoryId"
         >{{ c1.categoryName }}</a>
     </h3>
     <!-- 二三級分類 -->
     <div
       class="item-list clearfix"
       :style="{
         display: currentIndex === index ? 'block' : 'none',
       }"
     >
       <div
         class="subitem"
         v-for="c2 in c1.categoryChild"
         :key="c2.categoryId"
       >
         <dl class="fore">
           <dt>
             <a
               :data-categoryName="c2.categoryName"
               :data-category2Id="c2.categoryId"
               >{{ c2.categoryName }}</a
             >
           </dt>
           <dd>
             <em v-for="c3 in c2.categoryChild" :key="c3.categoryId">
               <a
                 :data-categoryName="c3.categoryName"
                 :data-category3Id="c3.categoryId"
                 >{{ c3.categoryName }}</a
               >
             </em>
           </dd>
         </dl>
       </div>
     </div>
   </div>
 </div>
goSearch(event) {
      //event.target:獲取到的是觸發(fā)事件的元素(div、h3、a、em、dt、dl)
      let node = event.target;
      //給a標簽添加自定義屬性data-categoryName,全部的字標簽當中只有a標簽帶有自定義屬性,別的標簽名字----dataset純屬扯淡
      let { categoryname, category1id, category2id, category3id } =
        node.dataset;
      //第二個問題解決了:點擊的到底是不是a標簽(只要這個標簽身上帶有categoryname)一定是a標簽
      //當前這個if語句:一定是a標簽才會進入
      if (categoryname) {
        //準備路由跳轉的參數對象
        let loction = { name: "search" };  // 固定參數
        let query = { categoryName: categoryname };
        //一定是a標簽:一級目錄
        if (category1id) {
          query.category1Id = category1id;
          //一定是a標簽:二級目錄
        } else if (category2id) {
          query.category2Id = category2id;
          //一定是a標簽:三級目錄
        } else {
          query.category3Id = category3id;
        }
        //判斷:如果路由跳轉的時候,帶有params參數,捎帶腳傳遞過去
        if (this.$route.params) {
          // 添加動態(tài)參數
          loction.params = this.$route.params;
          //動態(tài)給location配置對象添加query屬性
          loction.query = query; 
          //路由跳轉
          this.$router.push(loction);
        }
      }
    },

到此這篇關于Vue項目-三級聯(lián)動的路由跳轉與傳參的文章就介紹到這了,更多相關Vue路由跳轉與傳參內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue?axios庫發(fā)送請求的示例介紹

    Vue?axios庫發(fā)送請求的示例介紹

    axios是基于promise的HTTP庫,可以使用在瀏覽器和node.js中,它不是vue的第三方插件,vue-axios是axios集成到Vue.js的小包裝器,可以像插件一樣安裝使用:Vue.use(VueAxios,?axios),本文給大家介紹Vue?axios和vue-axios關系,感興趣的朋友一起看看吧
    2022-08-08
  • vue監(jiān)聽sessionStorage中值的變化方式

    vue監(jiān)聽sessionStorage中值的變化方式

    這篇文章主要介紹了vue監(jiān)聽sessionStorage中值的變化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 使用vue-print-nb打印el-table問題總結

    使用vue-print-nb打印el-table問題總結

    這篇文章主要介紹了使用vue-print-nb打印el-table問題總結,通過實例代碼介紹了vue-print-nb 打印功能,本文結合實例代碼講解的非常詳細,感興趣的朋友一起看看吧
    2024-01-01
  • vue中element 上傳功能的實現思路

    vue中element 上傳功能的實現思路

    這篇文章主要介紹了vue中element 的上傳功能的實現思路,本文大概通過兩種實現思路,具體內容詳情大家跟隨腳本之家小編一起看看吧
    2018-07-07
  • Vue自定義組件中v-model的使用方法示例

    Vue自定義組件中v-model的使用方法示例

    日常開發(fā)中除了直接在input標簽上使用v-model指令外,封裝的組件也需要v-model,下面這篇文章主要給大家介紹了關于Vue自定義組件中v-model使用的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Vue中的數據監(jiān)聽和數據交互案例解析

    Vue中的數據監(jiān)聽和數據交互案例解析

    這篇文章主要介紹了Vue中的數據監(jiān)聽和數據交互案例解析,在文章開頭部分先給大家介紹了vue中的數據監(jiān)聽事件$watch,具體代碼講解,大家可以參考下本文
    2017-07-07
  • vue3+ts+vite+pinia+element?plus項目使用語言國際化詳解

    vue3+ts+vite+pinia+element?plus項目使用語言國際化詳解

    文章介紹了如何在Vue?3?+?TypeScript?+?Vite?+?Pinia?+?Element?Plus項目中實現語言國際化,主要步驟包括安裝vue-i18n、創(chuàng)建語言文件、創(chuàng)建i18n實例、全局引入、類型聲明(可選)、創(chuàng)建語言切換組件、動態(tài)加載語言文件以及在組件和PiniaStore中使用國際化
    2025-11-11
  • vue 擴展現有組件的操作

    vue 擴展現有組件的操作

    這篇文章主要介紹了vue 擴展現有組件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • el-tree的實現葉子節(jié)點單選的示例代碼

    el-tree的實現葉子節(jié)點單選的示例代碼

    本文主要介紹了el-tree的實現葉子節(jié)點單選的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • vue中添加mp3音頻文件的方法

    vue中添加mp3音頻文件的方法

    本篇文章主要介紹了vue中添加mp3音頻文件的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論

台中县| 邳州市| 永川市| 汾西县| 大埔区| 嘉义县| 武鸣县| 兴安盟| 铜鼓县| 西城区| 天长市| 嘉义市| 晋江市| 高雄市| 兴和县| 凌源市| 哈尔滨市| 怀来县| 醴陵市| 汉中市| 西丰县| 祁东县| 夏邑县| 尖扎县| 紫阳县| 马公市| 昭平县| 象州县| 垦利县| 南昌县| 乌兰察布市| 肇东市| 大同县| 平塘县| 岳普湖县| 吴桥县| 海丰县| 蛟河市| 临武县| 尚志市| 普兰县|