日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue -路由

發布時間:2025/6/17 vue 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue -路由 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

后端路由,網站的所有超鏈接都是URL地址,所有URL地址都對應服務器資源

前端路由,對于單頁面程序來說,主要通過URL中的hash(#)來實現不同頁面之間的切換,同時hash有個特點,HTTP請求中不會包含hash相關的內容,所以單頁面程序中的頁面跳轉主要用hash實現,像a鏈接的錨點就是hash

單頁面程序中,這種通過hash改變來切換頁面的方式,稱為前端路由

Vue構造單頁面應用需要使用Vue Router,它是Vue官方的路由管理器,和Vue核心深度集成,使用前要導包vue-router

基本應用,示例

<body> <div id="app"><a href="#/login">登錄</a><a href="#/register">注冊</a><!--vue-router提供的元素,專門用來當作占位符,將來路由規則匹配到的組件會展示到這里--><router-view></router-view> </div><script>//組件的模版對象var login = {template: '<h3>登錄界面</h3>'}var register = {template: '<h3>注冊界面</h3>'}//創建一個路由對象,為構造參數傳遞一個配置對象var vueRouter = new VueRouter({//配置對象中的routes是路由匹配規則,每個路由規則都是一個對象 routes: [{path: '/login', component: login},{path: '/register', component: register}]})var vm = new Vue({el: '#app',//通過router屬性注入路由對象,使整個應用都路由功能 router: vueRouter}) </script> </body>

導入vue-router包后,在window全局對象中,就有了一個路由的構造函數,叫VueRouter,在new路由對象時可為構造函數傳遞一個配置對象

配置對象中routes為路由規則數組,每個路由規則都是一個對象,這個對象有兩個必須的屬性:
屬性1 path,表示監聽哪個路由的鏈接地址
屬性2 component,表示如果路由是前面匹配到的path ,則展示component屬性對應的那個組件
注意: component 的屬性值,必須是一個組件的模板對象

過程一覽:使用Vue?Router后請求地址會被加上#,點擊a標簽,URL地址會被修改,修改后的地址將被Vue實例上的路由對象監聽到,然后進行路由規則的匹配,匹配上了就展示對應的組件,展示區域就是<router-view>

?

可用router-link標簽來取代a標簽,這樣就可以省略#的書寫,router-link在頁面上默認會被渲染為一個a標簽

即使通過tag屬性變成了其他標簽,但依舊可以點擊

<router-link to="/login">登錄</router-link>

?

重定向到某個組件,如匹配到根路徑時重定向到登錄頁面,這里的redirect和后端的redirect不同,后端的redirect是服務器實現的302重定向,而這里的重定向應該只是組件的切換

{path:'/',redirect:'/login'}

?

設置選中路由高亮,被點擊的router-link標簽會被添加兩個類,可以對router-link-active添加樣式

如果想修改這個類的名字,可以通過路由的構造選項?linkActiveClass?來全局配置,甚至可以改成bootstrap的類

?

為路由切換添加動畫

將<router-view>標簽用<transition>包裹,之后一切按老套路設置

?

路由傳參

query方式傳遞給路由參數,如果在路由中使用查詢字符串(也就是問號傳參方式)給路由傳參,則不需要修改路由規則的path屬性,照樣能匹配上

組件實例會有個$route屬性,是個對象,對象中有query對象,存放的就是查詢字符數據

<div id="app"><router-link to="/login?id=10&name=Sam">登錄</router-link><router-link to="/register">注冊</router-link><router-view></router-view> </div><script> //組件的模版對象 var login = {//this可以省略,就像使用組件data數據時可直接調用屬性名   template: '<h3>登錄界面,這是查詢字符串的數據:{{this.$route.query}}</h3>',created() { //組件生命周期鉤子   console.log(this.$route)} }

?

params方式傳參

如果匹配規則是占位符形式

var vueRouter = new VueRouter({routes: [{path: '/login/:id/:name', component: login},{path: '/register', component: register}] })

?那傳參就要以這種方式,并且匹配多少個參數就要傳多少個,否則匹配不上

<router-link to="/login/18/Sam">登錄</router-link>

此時傳來的數據不在query中,而在params中

所以獲取數據時只需要this.$route.params即可

?

路由嵌套

使用children屬性實現子路由,不使用children則小組件顯示時大組件會消失,并且地址欄是直接顯示/login而不是/index/login

<body> <div id="app"><router-view></router-view><!--大組件渲染的地方--> </div> <template id="templ"><div><h1>++++++Index++++++</h1><router-link to="/index/login">登錄</router-link><router-link to="/index/register">注冊</router-link><router-view></router-view><!--小組件渲染地方--></div> </template><script>//index為大組件,里面有兩個小組件login和registervar index = {template: '#templ'}var login = {template: '<h3>登錄界面</h3>',}var register = {template: '<h3>注冊界面</h3>'}//創建一個路由對象var vueRouter = new VueRouter({routes: [{path: '/index',component: index,//子路由的path前面不要帶 / ,否則永遠以根路徑開始請求 children: [{path: 'login', component: login},{path: 'register', component: register}]}]})var vm = new Vue({el: '#app',router: vueRouter}) </script> </body>

?

?

命名視圖實現經典布局

有時候想同時同級展示多個組件,而不是嵌套展示,這時候命名視圖就派上用場

可以在界面中擁有多個單獨命名的組件,而不是只有一個單獨的出口,如果?router-view?沒有設置名字,那么默認為?default

<head><meta charset="UTF-8"><title>Title</title><script src="lib/vue.js"></script><script src="lib/vue-router.js"></script><style>* {margin: 0;padding: 0;}.header {height: 60px;background: #2c323b;}.container {display: flex;height: 500px;}.left {flex: 1;background: #ff4200;}.main {flex: 4;background: #3538ff;}</style> </head> <body> <div id="app"><router-view></router-view><div class="container"><router-view name="left"></router-view><router-view name="mainBox"></router-view></div> </div> <script>var header = {template: '<div class="header">header頭部區域</div>'}var left = {template: '<div class="left">left側邊欄區域</div>',}var mainBox = {template: '<div class="main">mainBox主體內容區域</div>'}//創建一個路由對象var vueRouter = new VueRouter({routes: [{ //使用components來指定多個組件,default為沒name屬性的那個router-view標簽 path: '/', components: {'default': header,'left': left,'mainBox': mainBox}}]})var vm = new Vue({el: '#app',router: vueRouter}) </script> </body>

結構構建好后再加上樣式

轉載于:https://www.cnblogs.com/Grani/p/9643979.html

總結

以上是生活随笔為你收集整理的Vue -路由的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。