本篇文章給大家分享的是有關(guān)怎么在vue中使用 $router.push實(shí)現(xiàn)兩組件間值傳遞,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
成都創(chuàng)新互聯(lián)專注于南皮企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城建設(shè)。南皮網(wǎng)站建設(shè)公司,為南皮等地區(qū)提供建站服務(wù)。全流程按需制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)vue是什么Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架,Vue與其它大型框架的區(qū)別是,使用Vue可以自底向上逐層應(yīng)用,其核心庫只關(guān)注視圖層,方便與第三方庫和項(xiàng)目整合,且使用Vue可以采用單文件組件和Vue生態(tài)系統(tǒng)支持的庫開發(fā)復(fù)雜的單頁應(yīng)用。
vue文件部分:
{{ node.label }}
這是封裝好的樹狀列表,使用 scoped slot 會(huì)傳入兩個(gè)參數(shù) node 和 data ,分別表示當(dāng)前節(jié)點(diǎn)的 Node 對(duì)象和當(dāng)前節(jié)點(diǎn)的數(shù)據(jù)。當(dāng)點(diǎn)擊button會(huì)路由跳轉(zhuǎn)頁面顯示在
那我們先來看一下ts中edit這個(gè)方法是怎么寫的。
edit(info: Idata) { this.$router.push({ name: `ListEdit`, query: { label: info.label, scene: info.scene, }, }); },
終于看到主角 $router.push ,它會(huì)帶兩個(gè)參數(shù),name表示即將跳轉(zhuǎn)到的路由名字,還有一個(gè)參數(shù)可以是query,也可以是params,它們的區(qū)別簡(jiǎn)單來說,就相當(dāng)于 get 和 post ,query == get ,params == post,query 會(huì)把攜帶的參數(shù)顯示在 url 中。那query中的參數(shù)就是所需要攜帶的參數(shù),那這一步總體來說就意味著跳轉(zhuǎn)到ListEdit這個(gè)路由頁面,并攜帶label、scene 這兩個(gè)參數(shù)。
至于其中的 info:Idata 這樣的寫法是因?yàn)閠s,ts接口了解一下。
現(xiàn)在編輯按鈕這部分內(nèi)容ok了,它確定了要跳轉(zhuǎn)的地方還有需要攜帶的參數(shù),那么我們這個(gè)ListEdit路由頁面就應(yīng)該做好準(zhǔn)備接收人家?guī)淼膮?shù)呀。在頁面創(chuàng)建期間和路由發(fā)生改變期間,都會(huì)有一個(gè)傳值的動(dòng)作,那就再created鉤子函數(shù)和監(jiān)聽路由函數(shù)中寫入代碼。
created() { const {label= "", scene= ""} = this.$route.query; this.form = { name: label.toString(), initScene: scene.toString(), }; }, watch: { $route(to, from) { if (to.path === "/list/listEdit") { const {label= "", scene= ""} = to.query; this.form = { name: label.toString(), initScene: scene.toString(), }; } }, },
我感覺這樣半截的代碼實(shí)在難以說明,name、initScene都是前面定義的,還是放出完整代碼體驗(yàn)一下吧。
樹狀列表編輯按鈕vue文件部分:
{{ node.label }}
樹狀列表編輯按鈕ts文件部分:
import Vue from "vue"; interface Idata { id: string; label: string; scene: string; children?: Idata[]; } export default Vue.extend({ data() { const data: Idata[] = [{ id: "1", label: "1", scene: "場(chǎng)景1", }, { id: "2", label: "2", scene: "場(chǎng)景2", children: [{ id: "4", label: "2-1", scene: "場(chǎng)景1", }], }, { id: "3", label: "3", scene: "場(chǎng)景2", }]; return { data, dataList: JSON.parse(JSON.stringify(data)), }; }, methods: { edit(info: Idata) { this.$router.push({ name: `VisListEdit`, query: { label: info.label, scene: info.scene, }, }); }, }, });
這里,ts接口定義可以遞歸實(shí)現(xiàn),children的類型定義還是Idata,就可以直接自我調(diào)用。
ListEdit 路由頁面vue文件部分:
ListEdit 路由頁面ts文件部分:
import Vue from "vue"; interface Iscenes { id: string; name: string; selected: boolean; } export default Vue.extend({ data() { const sceneOption: Iscenes[] = [{ id: "1", name: "場(chǎng)景1", selected: false, },{ id: "2", name: "場(chǎng)景2", selected: false, },{ id: "3", name: "場(chǎng)景3", selected: false, }]; return { form: { name: "", initScene: "", }, sceneOption, }; }, created() { const {label= "", scene= ""} = this.$route.query; this.form = { name: label.toString(), initScene: scene.toString(), }; }, watch: { $route(to, from) { if (to.path === "/list/listEdit") { const {label= "", scene= ""} = to.query; this.form = { name: label.toString(), initScene: scene.toString(), }; } }, }, methods: { submitForm() { console.log("test"); } }, });
最后,再來看一下,路由部分的配置:
import ListDetail from "../views/list-detail/index.vue"; import List from "../views/list/index.vue"; import { MenuConfig } from "./index"; export const listRouter: MenuConfig = { path: "/list", component: List, title: "目錄管理", key: "list", name: "list", hasPermission: true, subShow: false, children: [{ path: "listEdit", title: "編輯目錄", hasPermission: true, name: "ListEdit", key: "ListEdit", component: ListDetail, }], };
以上就是怎么在vue中使用 $router.push實(shí)現(xiàn)兩組件間值傳遞,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。