<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
<script> import { useRouter, useRoute } from 'vue-router' export default { setup() { const router = useRouter() // 元件內路由 const route = useRoute() // 元件內路由資訊 } } </script>
建立store
import { createStore } from 'vuex' import login from './login' const store = createStore({ state: {}, mutations: {}, actions: {}, modules: { login } }) export default store
元件內使用store
<script> import { useStore } from 'vuex' export default { setup() { const store = useStore() const state = store.state const methods = { // 處理commit handleMutation: () => { store.commit(...) }, // 處理dispatch handleAction: () => { store.dispatch(...) } } return { ...methods } } } </script>
因為在vue3的setup內不能使用this物件,所有所有直接通過this來存取的方法都不能使用了。
那麼在vue3中怎麼存取this.r o u t e r 或 者 t h i s . router 或者 this.router或者this.route呢?
記住一條規則:vue3中基本上所有通過this來存取的物件都換成useXxx的方式來獲取。
比如說router,可以通過useRouter和 useRoute來獲取router,route物件
企業開發中在src/router/index.js中全域性設定,並在main.js中新增到Vue物件
import { createRouter, createWebHistory } from "vue-router"; // 路由規則 const routes = [ { path: "/", name: "主頁", meta: ["istabbar"], component: () => import("../views/Home.vue"), }, ]; //根據路由規則建立路由 const router = createRouter({ history: createWebHistory(""), routes, }); export default router;
在main.js中新增到Vue物件
import { createApp } from "vue"; import App from "./App.vue"; import router from "./router"; // 新增路由router引入 // 建立VUE物件 createApp(App) .use(router) // 使用.use(router)新增路由router .mount("#app");
設定完後就可以全域性使用了
1.1、Router獲取及使用
先引入vue-router,再獲取物件:
import { useRouter } from 「vue-router」; const router = useRouter();
但是這也不是唯一的方法,傳統的和VUE3的使用方法如下:
這裡提供了三種方法用於獲取 router 物件
<template> <div class="page"> 因為在setup內部沒有this存取許可權,不能直接使用this存取this.$router 或者 this.$route。所有使用useRouter, useRoute來獲取 </div> </template>
<script> import { getCurrentInstance } from "vue"; import { useRouter } from "vue-router"; export default { setup() { // 第一種方法:獲取路由物件 router 的方法1 const vue = getCurrentInstance(); const router1 = vue.ctx.$router; // 第二種方法:獲取路由物件 router 的方法2 const router2 = useRouter(); // 下面提供了router對應的方法使用大全 // ------------------------------------------------------ // router1.addRoute(parentOrRoute, route) // router1.afterEach(回撥函數) // router1.back() 等價於 go(-1) // router1.beforeEach(回撥函數) // router1.beforeResolve(回撥函數) // router1.currentRoute 獲取當前路由:如: {_rawValue: {…}, _shallow: true, __v_isRef: true, _value: {…}} // router1.forward() 等價於 go(1) // router1.getRoutes: ƒ getRoutes() // router1.go(delta) 等價於 routerHistory.go(delta) 跳到指定歷史記錄 // router1.hasRoute(name) 判斷是否有對應的路由 // router1.isReady() 判斷路由是否準備跳轉 // router1.onError(回撥函數) 當發生錯誤的時候執行的 // router1.options 獲取所有路由資訊 {history: {…}, routes: Array(5)} // router1.push(to) 跳轉到指定路由對應的頁面,有歷史記錄 // router1.removeRoute(name) 動態的刪除某個路由 // router1.replace(to) 直接跳轉到指定路由頁面,沒有歷史記錄 // router1.resolve(rawLocation, currentLocation) 可以自定義跳轉引數的方法 return {}; }, mounted() { // 第三種方法:獲取路由物件 router 的方法3 console.log(this.$router); }, }; </script>
1.2、Route獲取及使用
先引入vue-router,再獲取物件:
import { useRouter } from 「vue-router」; const router = useRouter();
但是這也不是唯一的方法,傳統的和VUE3的使用方法如下:
這裡提供了三種方法用於獲取 router 物件
<template> <div class="page"> 因為在setup內部沒有this存取許可權,不能直接使用this存取this.$router 或者 this.$route。所有使用useRouter, useRoute來獲取 </div> </template>
<script> import { getCurrentInstance } from "vue"; import { useRoute } from "vue-router"; export default { setup() { // 第一種方法:獲取路由物件 router 的方法1 const vue = getCurrentInstance(); const route1 = vue.ctx.$router.currentRoute.value; console.log(route1); // 第二種方法:獲取路由物件 router 的方法2 const route2 = useRoute(); console.log(route2); // 下面提供了route對應的屬性使用大全 // ------------------------------------------------------ // fullPath: "/user" 完整路由路徑 // hash: "" 錨點部分 // href: "/user" 跳轉來的時候的路徑 // matched: [{…}] 路由匹配日規則陣列 // meta: {0: "istabbar"} 路由附加的後設資料 // name: "個人中心" 路由的名稱 // params: {} 路由跳轉時帶過來的附加引數,如果是物件需要轉換成JSON格式 // path: "/user" 編碼 URL 的 pathname 部分,與路由地址有關 // query: {} 地址附帶的引數 // redirectedFrom: undefined 重定向跳轉過來之前的地址,如果沒有重定向,則為 undefined。 return {}; }, mounted() { // 第三種方法:獲取路由物件 router 的方法3 console.log(this.$route); }, }; </script>
企業開發中在src/store/index.js中全域性設定,並在main.js中新增到Vue物件
import { createStore } from "vuex"; //建立儲存物件 export default createStore({ // 需要儲存的值都放在這裡面 state() { return { count: 0, // 在檢視中通過$store.state.count來獲取 }; }, // 在其他檢視中通過 $store.commit('setState', 10) 使用,用於修改stor存的值 mutations: { setState(state, count) { // 只能接受兩個引數,用於修改store存的值 state.count = count; }, }, // 相當於元件的計算屬性 通過 $store.getters.doubleCount 獲取計算後的值 getters: { doubleCount(state) { return state.count * 2; }, }, // 非同步任務 不會改變state 通過 $store.dispath('doubleCount') 使用 actions: { doubleCount(context) { context.commit("doubleCount"); }, }, // store的下級store 方便大型專案複雜資料管理,這裡面相當於可以在放置一個和外面這些一樣的模組 modules: {}, });
在main.js中新增到Vue物件
import { createApp } from "vue"; import App from "./App.vue"; import router from "./router"; // 新增路由router引入 import store from "./store"; // 新增全域性儲存vuex引入 // 建立VUE物件 createApp(App) .use(router) // 使用.use(router)新增路由router .use(store) // 使用.use(store)新增全域性儲存vuex .mount("#app");
設定完後就可以全域性使用了
2.1、Store獲取及使用
先引入vuex,再獲取物件:
import { useStore } from 「vuex」; const store = useStore();
這裡提供了三種方法用於獲取 router 物件
<template> <div class="page"> 因為在setup內部沒有this存取許可權,不能直接使用this存取this.$router 或者 this.$route。所有使用useRouter, useRoute來獲取 </div> </template>
<script> import { getCurrentInstance } from "vue"; import { useStore } from "vuex"; export default { setup() { // 第一種方法:獲取路由物件 router 的方法1 const vue = getCurrentInstance(); const store1 = vue.ctx.$store; console.log(store1); // 第二種方法:獲取路由物件 router 的方法2 const store2 = useStore(); console.log(store2); // 下面提供了:store 對應的屬性使用大全 // ------------------------------------------------------ // commit(type, payload, options2) 在其他檢視中使用mutations中定義的方法 // dispatch(type, payload) 非同步任務 不會改變state 在其他檢視中使用actions中定義的方法 // getters: {} 相當於元件的計算屬性 通過 $store.getters.doubleCount 獲取計算後的值 // state: (...) store中儲存的值,就是通過這個在檢視中獲取store儲存的值 return {}; }, mounted() { // 第三種方法:獲取路由物件 store的方法3 console.log(this.$store); }, }; </script>
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45