59 slot槽口(插槽)、路由


59 slot槽口(插槽)、路由

一、slot槽口(插槽)

1.1概念

開辟一個插槽
組件嵌套的時候,組件標簽中的內容無法顯示。如果你非要顯示數據,那么就開辟一個槽口(插槽)

1.2槽口的創建方式

  • 匿名槽口

父組件
<子組件>
內容
</子組件>

子組件

<slot></slot>

 

  • 具名槽口

父組件
<子組件>
<div  slot='自定義name1'>內容1</div>
<div  slot='自定義name2'>內容2</div>
<div  slot='自定義name3'>內容3</div>
</子組件>

子組件

<slot name='自定義name1' ></slot>
<slot name='自定義name2' ></slot>
<slot name='自定義name3' ></slot>

 

  • 作用域槽口

父組件
<子組件>
<div  slot-scope ='變量'>
//變量代表的是子組件數據的json串
</div>
</子組件>

子組件

<slot 自定義屬性1='數據1' 自定義屬性2='數據2' 自定義屬性3='數據3' ></slot>

二、路由

在vue前端框架中,渲染組件有兩種方式: 一通過組件嵌套實現組件渲染。二、通過路由渲染組件

2.1路由的概念

通過導航(path地址)跳轉渲染不同的組件

通過不同的地址渲染不同的內容

路由是vue的核心插件之一

官網地址:https://router.vuejs.org/zh/installation.html

2.2 安裝

一、通過下載腳手架 安裝路由選項(常用)
默認會自動配置相關路由文件

二、單獨安裝路由
就沒有默認文件
npm install(i) vue-router
所有的配置文件要自己去寫

2.3 初始化路由文件

router文件夾 =>index.js

//引入vue核心庫
import Vue from 'vue'
//引入路由文件
import vueRouter from 'vue-router'

//調用路由插件
Vue.use(vueRouter)

//實例化路由的構造函數,得到路由的配置對象
//導出路由的配置對象
//export default 這種方式,整個模塊中只能調用一次!!!

export default new vueRouter({
   //routes 路由 路由中肯定回配置大量的路線,不同的路線可以渲染 不同的組件
})

main.js

import Vue from 'vue'
import App from './App.vue'

//引入封裝好的路由文件
//如果你創建文件是index.js你可以直接訪問它的上層目錄就可以了
//如果不是index.js,地址引入就必須具體到某一個文件名
import router from './router'

Vue.config.productionTip = false

new Vue({
 router,
 render: h => h(App)
}).$mount('#app')
刪除默認的app.vue內容
刪除views默認的文件夾以及文件
刪除components中的 HelloWorld.vue文件

2.4基本路由的搭建

router=>index.js

//引入vue核心庫
import Vue from 'vue'
//引入路由文件
import vueRouter from 'vue-router'
//引入要渲染的組件
import Home from '../components/home'

//調用路由插件
Vue.use(vueRouter)

export default new vueRouter({
   //routes 路由 路由中肯定回配置大量的路線,不同的路線可以渲染 不同的組件
   routes: [
      {
           path:'/home',//地址
           component:Home
      }
  ]
})

app.vue

<template>
   <div>
     <h1>主組件</h1>
     <!-- 路由的視圖 或者 路由的出口 -->
     <router-view/>
   </div>
</template>

2.5路由的重定向

routes:[
{//路由的重定向,無論輸入什么地址,只要不符合已有path就會被強制跳轉到重定向地址
           path:'*',
           redirect:'/home'
      }
]

2.6路由的視圖

<router-view/>
  或者
<router-view></router-view>

2.7路由的導航

    <!-- 
         路由導航
    to:'要與路由中的path地址一致'   必填屬性  
    router-link 被瀏覽器解析成為a標簽
    默認是a標簽。通過tag可以改變默認標簽 tag='標簽名'
    activeClass 內置屬性,可以觸發點擊的樣式
   -->
   <router-link activeClass='active' tag='span' to='/home'>首頁</router-link>
   <router-link activeClass='active'  to='/cart'>購物車</router-link>

2.8 嵌套路由

分析邏輯需求,創建組件

router=>index.js

//引入vue核心庫
import Vue from 'vue'
//引入路由文件
import vueRouter from 'vue-router'

//調用路由插件
Vue.use(vueRouter)
//引入一級路由
import Index from '../pages/index.vue'
import Play from '../pages/play.vue'
//二級路由組件
import Home from '../views/home'
import Rank from '../views/rank.vue'
import Search from '../views/search.vue'

export default new vueRouter({
   //routes 路由 路由中肯定回配置大量的路線,不同的路線可以渲染 不同的組件
   routes: [
      {
           path:'/index',
           component:Index,
           //在哪里渲染在哪里嵌套
           children:[
               //二級路由path地址如果加'/' 訪問地址就是有'/二級path'
               //二級路由path地址沒有加'/' 訪問地址就是有'/一級/二級path'
              {
                   path:'/home',
                   component:Home
              },
              {
                   path:'/rank',
                   component:Rank
              },
              {
                   path:'/search',
                   component:Search
              },
              {//二級路由重定向
                   path:'',
                   redirect:'/home'
              }
          ]
      },
      {
           path:'/play',
           component:Play
      },
      {
           path:'*',
           redirect:'/index'
      }
  ]
})

app.vue

<template>
   <div>
     <!--
       app.vue中不要寫其他內容除了一級路由出口!!!
       因為app的內容會影響所有的組件因為它是根組件
      -->
     <!-- 一級路由出口 -->
     <router-view></router-view>
   </div>
</template>

index.vue

<template>
   <div>
       <div>
           <h1>優音樂</h1>
       </div>
       <!-- 二級路由導航切換 -->
       <router-link to="/home">推薦音樂</router-link>
       <router-link to="/rank">排行榜</router-link>
       <router-link to="/search">搜索</router-link>
       <!-- 二級路由出口 -->
       <router-view></router-view>
   </div>
</template>

2.9編程式導航

  • push()

往歷史記錄中添加一條數據
  • replace()

替換當前的歷史記錄
  • back()

回退
  • go(n)

n是一個整數
-1 上一頁 (經常用的)
0 本頁
1 下一頁
以上方法,底層均是參照原生window.history.api方法
中文:https://developer.mozilla.org/zh-CN/docs/Web/API/Histo
英文:https://developer.mozilla.org/en-US/docs/Web/API/History_API

2.10 路由傳參之動態路由(用的並不多)

注意點:一定會修改路由文件!!!

router=>index.js

  {//動態路由
   path: "/detail/:變量",
   component: Detail,
},
  • 通過路由導航跳轉並傳遞參數

ul>
           <li class="item" v-for="item in goodslist" :key='item.id'>
               <router-link tag="div" :to="'/detail/'+item.id"> 商品名稱:{{item.name}}</router-link>
           </li>
       </ul>

 

  • 通過編程式導航跳轉並傳遞參數

<ul>
     <li @click="goDetail(item.id)" class="item" v-for="item in goodslist" :key="item.id">
      商品名稱:{{ item.name }}
     </li>
   </ul>
   
邏輯部分:
goDetail(id){
        this.$router.push('/detail/'+id)
    }
  • 取值

this.$route.params.變量

 

2.11 路由傳參之query參數

注意點:不需要 不需要 不需要 !!!操作路由文件!!!

  • 通過路由導航跳轉並傳遞參數

ul>
           <li class="item" v-for="item in goodslist" :key='item.id'>
               <router-link tag="div" :to="'/order?變量='+item.id"> 商品名稱:{{item.name}}</router-link>
           </li>
       </ul>

 

  • 通過編程式導航跳轉並傳遞參數

<ul>
     <li @click="goOrder(item.id)" class="item" v-for="item in goodslist" :key="item.id">
      商品名稱:{{ item.name }}
     </li>
   </ul>
   
邏輯部分:
goOrder(id){
        this.$router.push('/order?變量='+id)
this.$router.push({
path:'/order',
query:{
變量:id
}
})
    }
  • 取值

this.$route.query.變量

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM