首页 > 其他分享 >vue路由的使用,命名,参数,范式,嵌套,动态匹配

vue路由的使用,命名,参数,范式,嵌套,动态匹配

时间:2023-02-14 15:38:20浏览次数:44  
标签:vue 范式 template component 嵌套 let VueRouter router id


基本使用:
1,让Vue使用该VueRouter创建,

Vue.use(VueRouter);

2, 创建router对象

var router = new VueRouter({
});

3, 在创建的router对象中配置路由对象,路由匹配的规则,

var router = new VueRouter({
routes: [
{
path: '/login',
component: Login
},
{
path: '/register',
component: Register
}
]
});

4, 把创建完的路由对象放到Vue实例中管理

let vm = new Vue({
el: "#app",
data() {
return {}
},
methods: {},
components: {
App
},
template: `<App></App>`,
//把Router交给Vue实例管理
router//和App一样,<==> router:router 只写一个即可
})

两个组件

let Login = {
template: `<div>登录页面</div>`
};
let Register = {
template: `<div>注册页面</div>`
};

App中使用VueRouter提供的属性替换a标签
引入vue-router.js文件,文件中有两个组件 router-link 和 router-view
router-link 相当于a标签,这里有一个to属性指向a标签的href属性
router-view 是路由匹配组件的出口,即显示的组件的位置

let App = {
template: `<div id="app">
<!-- <a href="#"><button>Login</button></a>-->
<!-- 用router-link和router-view替换a标签<a href="#"><button>Register</button></a>-->
<router-link to="/login"><button>Login</button></router-link>
<router-link to="/register"><button>Register</button></router-link>
<router-view></router-view>
</div>`,
};

命名

Vue.use(VueRouter);
let router = new VueRouter({
routes: [
{
name:'Login',
path:"/login",
component:Login
},
{
name:'Register',
path:"/register",
component:Register
}
]
});
let App = {
template: `<div id="app">
<router-link :to="{name:'Login'}">Login</router-link>
<router-link :to="{name:'Register'}">Register</router-link>
<router-view></router-view>
</div>`
};

绑定to属性to属性是一个对象,命名一个name可以通过name查找地址,也可以绑定别的
路由的参数和范式

//动态路由参数格式 params设置参数 : xxx.html#/user/1
//查询 格式 query设置参数 : xxx.html#/user?userId=1
Vue.use(VueRouter);
let router = new VueRouter({
routes:[
{
name:'User_One',
path:'/user/:id',//动态匹配 :id 用params
component:Params
},
{
name:'User_Two',
path:'/user',
component:Query//查询 用query
}
]
});

let App = {
template:`<div id="app">
<router-link :to="{name:'User_One',params:{id:1}}">User One</router-link>
<router-link :to="{name:'User_Two',query:{userId:2}}">User Two</router-link>
<router-view></router-view>
</div>`
};

参数写在to绑定的对象中,:id绑定id的路由用params:{id:xx}绑定参数,组件可以根据传入的参数进行不同操作,查询用query:{xxx:xxx}

//Router.js 文件引入后抛出两个对象供我们使用
// $router => VueRouter实例 $route => VueRouter实例的routes属性
//this.$route.params.id//可以查询传入的id

路由的嵌套

Vue.use(VueRouter);
let router = new VueRouter({
routes: [
{
name: 'Home',
path: '/home',
component: Home,
children:[
{
name:'About',
path:'/about',
component:About
},
{
name:'Picture',
path:'/picture',
component:Picture
}
]
}
]
});
let App = {
template: `<div id="app">
<router-link :to="{name:'Home'}">Home</router-link>
<router-view></router-view>
</div>`

使用了children属性,配置嵌入的组件的信息

let About = {
template: `<div>
<p>About Us</p>
</div>`
};
let Home = Vue.component('Home', {
template: `<div >
<p>Home Page</p>
<router-link :to="{name:'Picture'}">Picture</router-link>
<router-link :to="{name:'About'}">About</router-link>
<router-view></router-view>
</div>`
});
let Picture = {
template: `<div>
<p>Picture Rover</p>
</div>`
};

动态匹配路由

Vue.use(VueRouter);
let router = new VueRouter({
routes:[
{
name:'home',
path:'/home',
component:Home,
children:[
{
name:'one',
path:'/home/:id',
component:Common,
}
]
}
]
});
let App = {
template:`<div id="app">
<router-link :to="{name:'home'}">Home</router-link>
<router-view></router-view>
</div>`
};
let Home = {
template:`<div>
<router-link :to="{name:'one',params:{id:'one'}}">one</router-link>
<router-link :to="{name:'one',params:{id:'two'}}">two</router-link>
<!--<> 这要注意:因为上面两个链接指向的是同一个组件,所以在点击过一个再点击另一个触发的组件还是同一个这样vue不会对其进行渲染,虽然路由发生改变,但组件并没有重新渲染,还是第一个点击获取的信息,解决这个问题就是在公共组件中使用watch监听传入路由的参数的变化,来做出响应反应 </>-->
<router-view></router-view>
<p>Home Page</p>
</div>`,
methods:{
}

};
let Common = {
template:`<div>
<p>{{Common}}</p>
</div>`,
data(){
return{
Common:""
}
},
created(){
//这里不在组件渲染完成给Common一个值的话,点击同一个链接Common不会渲染到界面上
if (this.$route.params.id === 'two'){
this.Common = 'two';
}else if (this.$route.params.id === 'one'){
this.Common = 'one';
}
},
watch:{//watch 监听传入id的变化,并根据参数变化进行操作
$route(value,oldValue){
if (value.params.id === 'one'){
this.Common = 'one';
}else if (value.params.id === 'two'){
this.Common = value.params.id
}
}
}
};

这样根据传入不同的参数,公共组件中的数据会不同展示,数据驱动试图


标签:vue,范式,template,component,嵌套,let,VueRouter,router,id
From: https://blog.51cto.com/u_15964288/6056958

相关文章

  • Vue 组件传值方法5,利用$parent和$Children
    实现思想:利用每个组件的属性来传值,即每个组件都有Children等属性,根据这些属性找到要找的组件,对其进行操作,比如Vue实例vm的父级没有,子组件在这里有App和App下的Son,这些都是......
  • Vue组件传值方法4利用provide和inject
    父组件中设置provide可以设置多个属性,在它的子组件中设置inject接收父组件:provide:{for:'AppPassValue',}子组件:data(){return{......
  • drf的总结与前端vue框架了解
    drf的总结与前端vue框架了解一、drf知识点整合1、drf入门及规范#1drf入门规范-前后端分离模式-前后端混合-postman-restful规范-drf:django......
  • 高德地图手动实现轨迹,vue
    预览效果1、高德地图的官网使用的是web端,jsapi;https://lbs.amap.com/api/jsapi-v2/summary2、准备https://lbs.amap.com/api/jsapi-v2/guide/abc/prepare注册账号—......
  • vuecli实现仿写饿了么
    ​​点击github获取代码​​仿写饿了么是一个不错的用来锻炼vue的方式,我仿写的饿了么还是比较浅显的,没有使用饿了么提供的api,数据就是自己手写的几条json用json-server打开,......
  • 1 drf回顾 、2 前端发展历史、 3 vue介绍
    目录1drf回顾2前端发展历史3vue介绍1drf回顾#1drf入门规范 -前后端分离模式-前后端混合-postman-restful规范-drf:django的app#2序列化类......
  • Vue项目在ie浏览器中显示空白的兼容性问题解决
    问题:在ie浏览器中页面报错:SCRIPT5022:SecurityError小编也不知道原因是什么,小编是尝试了以下几种方式才显示出来,这里建议大家试试看。1、下载软件包:@babel/polyfill执......
  • nginx开启Gzip压缩,Vue性能优化之使用gzip压缩打包
    一、前言不管是vue项目还是react项目在使用webpack打包之后都会生成一个动辄一两兆甚至更大的js文件,在某些情况下严重影响项目性能,打开页面的时候白屏时间会很长,本文将介绍......
  • vue-day02——插值语法、文本指令、属性指令、事件指令、class和style、条件渲染、列
    目录昨日回顾今日内容1插值语法1.1mvvm演示1.1插值语法2文本指令3属性指令4事件指令5class和style6条件渲染7列表渲染补充:作业昨日回顾#1put,post提交的jso......
  • Vue 01
    VueVue的发展史:Vue(发音为/vjuː/,类似view)是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模......