9.13 Day50---Vue路由

1.Vue路由模块的安装

1.在创建工程的时候勾选路由模块

2.在创建工程的时候自己使用npm install 命令手动安装

npm install vue-router@3.5.1-S

这两种安装方式的区别:

f5655b288b48bae695f8f37093d2a3d4.png

安装好vue路由模块以后可以在package.json文件的dependencies看到路由的依赖坐标

可以在当前工程的node_modules目录中找到路由模块的源代码

4896a55f4d422be496294ea0cfc9d53d.png

2.vue路由模块的配置文件

如果是使用第一种方式安装路由, 这个配置文件会自动创建好

如果是使用第二种方式安装路由, 这个配置文件需要手动安装

  1. import 表示导入一个对象 或者函数

  2. const

在老版本的js语言中, 声明变量只有关键字var

在新版本的js语言中, 新增了两个关键字 let 和 const

let 和 var的区别是 let 有块级作用域, var 没有 (在新版本中用let取代了var, var被弃用了)

const 用于定义常量, 有点像 java的 final

import Vue from 'vue'

import VueRouter from 'vue-router'

Vue.use(VueRouter)

// 定义了一个全局的路由规则数组, 这个数组名称为routes

// 数组中的元素是每一个路由规则对象 {path:'', component: }

const routes = [

]

// 定义了一个全局的路由器对象, 并且将路由规则数组作为参数传给了路由器构造函数

const router = new VueRouter({

mode: 'history',

base: process.env.BASE_URL,

routes

})

// 导出路由器对象

export default router

3.程序入口文件main.js

import Vue from 'vue'

import App from './App.vue'

import router from './router'

import store from './store'

new Vue({

router,

store,

render: function (h) { return h(App) }

}).$mount('#app')

982966e7e289a0c9407919fb9b1cfb61.png

4.记住注册路由地址写在哪里

写在router/index.js里面

  1. 导入组件

import Home from "@/views/Home";

 

   2.注册路由

{

path:'/home',

component:Home

}

5.记住两个与路由相关的标签

<router-link to="">与<a href="">很像, 都是超链接

但是有区别:

  • <a> 标签打开一个新的html页面, 默认会创建一个新的标签页打开

  • <router-link>打开一个新的vue组件, 挂载在router-view身上

  1. <router-link to=""></router-link>

  2. <router-view/>

可能不写<router-link>但是一定要写<router-view>

因为除了<router-link>这个标签可以跳路由,还可以使用路由对象在js中跳路由

6.如何使用路由对象跳路由

像用户数据表格里面的详情, 编辑功能跳路由, 并不是使用<router-link>来跳

而是使用<button> + 点击事件 + 回调函数 + 路由对象来跳转

 

l-table-column label="操作">

<template v-slot="scope">

<el-button

size="mini"

type="primary"

@click="handleDetail(scope.$index, scope.row)">详情</el-button>

<el-button

size="mini"

@click="handleEdit(scope.$index, scope.row)">编辑</el-button>

<el-button

size="mini"

type="danger"

@click="handleDelete(scope.$index, scope.row)">删除</el-button>

</template>

</el-table-column>

按钮点击事件的回调函数

写在methods: { } 里面

// this是当前vue组件对象

// $router是全局的路由器对象

// push()方法是跳转路由的方法, 参数是路由地址

// 可以有两种风格: rest风格和get风格

// rest风格的地址, 参数是地址的一部分

// get风格的地址, 参数使用?拼接在url后面

// index = scope.$index 该行的行号, 可要可不要

// row = scope.row 该行的数据对象, 可以row看成是一个user对象

handleDetail(index, row){

this.$router.push('/user/detail/' + row.id);

},

handleEdit(index, row){

this.$router.push('/user/edit/' + row.id);

},

7.路由传参

什么时候会用到路由传参?

当前路由: /user

189bd2142f0436fb6b8e62dc35b9da6a.png

点击详情按钮, 跳转到 /user/detail

路由参数在什么地方取?

一般在目标组件的mounted(){} 钩子函数中取

路由参数怎么取?

rest风格的参数 (使用:id将参数设置为是url地址的一部分)

path: ’/user/detail/:id‘

this.$router.push('/user/detail/' + row.id);

 取:

在this.$route.params里面取, 占位符名为id, 就是.id即可取出参数

注意: 跳转路由的对象是this.$router,取参数的对象是this.$route

一个后面有r, 一个没有

this.$route.params.id

视图

<template>

<div>

<el-breadcrumb separator="/" style="margin-bottom: 10px">

<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>

<el-breadcrumb-item :to="{ path: '/user' }">用户管理</el-breadcrumb-item>

<el-breadcrumb-item>用户详情</el-breadcrumb-item>

</el-breadcrumb>

<el-card class="box-card">

<el-empty description="暂无数据" v-if="user == null"></el-empty>

<el-descriptions border :column="1" v-if="user != null" >

<el-descriptions-item label="用户编号">

{{ user.id }}

</el-descriptions-item>

<el-descriptions-item label="用户名">

{{ user.username }}

</el-descriptions-item>

<el-descriptions-item label="手机号">

{{ user.mobile }}

</el-descriptions-item>

<el-descriptions-item label="身份证号码">

{{ user.idCode }}

</el-descriptions-item>

<el-descriptions-item label="性别">

<el-tag size="small"> {{ user.sex}} </el-tag>

</el-descriptions-item>

<el-descriptions-item label="创建日期">

{{ user.createDate }}

</el-descriptions-item>

<el-descriptions-item label="修改日期">

{{ user.modifyDate }}

</el-descriptions-item>

<el-descriptions-item label="头像">

{{ user.avatar }}

</el-descriptions-item>

<el-descriptions-item label="身份证正面">

{{ user.idCardFront }}

</el-descriptions-item>

<el-descriptions-item label="身份证反面">

{{ user.idCardBack }}

</el-descriptions-item>

</el-descriptions>

</el-card>

</div

</template>

<script>

export default {

name: "Detail",

data(){

return{

user: null

//预定义一个user:null,目的是绑定视图,user为空显示空巨幕,user不为空就必然有属性,可以绑定视图{{user.username}} {{user.sex}}

}

},

methods:{

getUser(id){

//定义一个getUser(id)函数,发起http请求后端,把id作为参数传给后端,rest风格,在回调函数then中把data赋给this.user,当http请求成功后,拿到的data就是后端返回根据id查询的user对象,此时user改变,视图就会自动刷新,这就是双向绑定的魅力

this.$http.get('/user/detail/' + id)

.then((data) => {

this.user = data

})

}

},

mounted(){

//在mounted(){}钩子函数中调用this.getUser(),并把路由中取出的id传给getUser()

this.getUser(this.$route.params.id)

}

}

</script>

后端

controller

@GetMapping("/detail/{id}")

public ResponseData detail(@PathVariable("id") Integer id){

return userService.selectById(id);

}

service接口

ResponseData selectById(Integer id);

service实现类

@Override

public ResponseData selectById(Integer id) {

return ResponseData.success(userMapper.selectById(id));

}

编辑功能

<template>

<div>

<el-breadcrumb separator="/" style="margin-bottom: 10px">

<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>

<el-breadcrumb-item :to="{ path: '/user' }">用户管理</el-breadcrumb-item>

<el-breadcrumb-item>编辑用户</el-breadcrumb-item>

</el-breadcrumb>

<el-card class="box-card">

<el-empty description="暂无数据" v-if="user == null"></el-empty>

<el-form :model="user" :rules="rules" v-if="user != null" ref="userForm" label-width="100px" class="demo-ruleForm">

<el-form-item label="用户编号" prop="id">

<el-input v-model="user.id" readonly disabled></el-input>

</el-form-item>

<el-form-item label="用户名" prop="username">

<el-input v-model="user.username"></el-input>

</el-form-item>

<el-form-item label="性别" prop="sex">

<el-radio-group v-model="user.sex" size="small">

<el-radio-button label="男"></el-radio-button>

<el-radio-button label="女"></el-radio-button>

</el-radio-group>

</el-form-item>

<el-form-item label="手机号码" prop="mobile">

<el-input v-model="user.mobile"></el-input>

</el-form-item>

<el-form-item label="身份证号码" prop="idCode">

<el-input v-model="user.idCode"></el-input>

</el-form-item>

<el-form-item>

<el-button type="primary" @click="submitForm('userForm')">提交</el-button>

<el-button @click="resetForm('userForm')">重置</el-button>

</el-form-item>

</el-form>

</el-card>

</div>

</template>

<script>

export default {

name: "Modify",

data(){

return{

user: null,

rules: {

}

}

},

methods:{

getUser(id){

this.$http.get('/user/detail/' + id)

.then((data) => {

this.user = data

})

},

submitForm(formName) {

this.$refs[formName].validate((valid) => {

if (valid) {

alert('submit!');

} else {

console.log('error submit!!');

return false;

}

});

},

resetForm(formName) {

this.$refs[formName].resetFields();

}

},

mounted(){

this.getUser(this.$route.params.id)

}

}

</script>

<style scoped>

</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值