//后端路由:根据URL请求返回不同内容,URL请求地址与服务器之间的关系
//前端路由:负责事件监听,触发事件后通过事件函数渲染不同内容
//SPA单页面应用程序,原理:基于URL地址的hash(hash的变化会导致浏览器记录访问历史的变化,但是不会触发URL请//求)
//vue 的 is 属性简单说 就是扩展 html标签的限制 通过 :is 切换不同的组件–
//以下为模拟路由实验
<script type="text/javascript" src="C:\Users\ASUS\Desktop\前端\vue学习\vue.min.js"></script>
<script type="text/javascript" src="C:\Users\ASUS\Desktop\前端\vue学习\vue.router.js"></script>
<script>
const one = {
template:'<h1>one</h1>'
}
const two = {
template:'<h1>two</h1>'
}
const three = {
template:'<h1>three</h1>'
}
const four = {
template:'<h1>four</h1>'
}
var vm =new Vue({
el:'#app',
props:[''],
data:{
comName:'one'
},
components: {
one,
two,
three,
four
},
computed: {},
beforeMount() {},
mounted() {},
methods: {},
watch: {}
})
window.onhashchange = function(){
switch(location.hash.slice(1)){
case '/one' :
vm.comName = 'one'
break
case '/two' :
vm.comName = 'two'
break
case '/three' :
vm.comName = 'three'
break
case '/four' :
vm.comName = 'four'
break
}
}
</script>
</body>
//基本使用步骤:
//1 引入相关库文件
//2 添加路由链接
//3 添加路由填充位
//4 定义路由组件
//5 配置路由规则并创建路由实例
//6 把路由挂载到Vue根实例中
<!--动态路由分布-->
<router-link to="/user/1">user</router-link>
<router-link to="/user/2">user</router-link>
<!--命名路由-->
<router-link :to="{name:'user',params:{id:40}}">user</router-link>
<router-link to="/register">register</router-link>
<router-view></router-view>
</div>
<script type="text/javascript" src="C:\Users\ASUS\Desktop\前端\vue学习\vue.min.js"></script>
<script type="text/javascript" src="C:\Users\ASUS\Desktop\前端\vue学习\vue.router.js"></script>
<script>
const tab1 = {
template:'<h1>TAB1</h1>'
}
const tab2 = {
template:'<h1>TAB2</h1>'
}
const user = {
/*
//动态路由分布
//路由组件传递参数
//props:['id'],
props:['id','name','age'],
template:'<div>USER---当前用户名为:{{name}}----年龄为:{{age}}------ID为:{{id}} </div>'
//命名路由:
//template:'<div>USER---当前用户ID为:{{$route.params.id}} </div>'
*/
//编程式跳转
props:['id','name','age'],
template:`<div>
<h1>USER---当前用户名为:{{name}}----年龄为:{{age}}------ID为:{{id}}</h1>
<button @click="getRegister">跳转到注册页面</button>
</div>`,
methods:{
getRegister() {
this.$router.push('/register')
}
}
}
// 页面导航:
//1 声明式:通过超链接或vue中的等实现
//2 编程式:通过JavaScript形的API实现导航,location.href等
const register = {
template:`<div>
<router-link to="/register/tab1">tab1</router-link>
<router-link to="/register/tab2">tab2</router-link>
<router-view></router-view>
<button @click="back()">后退</button>
</div>`,
methods:{
back(){
this.$router.go(-1)
}
}
}
const router2 = new VueRouter({
routes:[
//通过路由重定向功能绑定默认访问对象,向路由租组件中添加redirect属性
{path:'/register',redirect:tab1},
{path:'/register/tab1',component:tab1},
{path:'/register/tab2',component:tab2}
]
})
const router = new VueRouter({
routes:[
//通过路由重定向功能绑定默认访问对象,向路由租组件中添加redirect属性
{path:'/',redirect:user},
//动态路由分布,用/将编号和上级名称分开
//props表示是否传参,是一个布尔值或者对象
//{path:'/user/:id',component:user,props:true},
//{path:'/user/:id',component:user,props:{name:'li ming',age:40}},
{
name:'user',
path:'/user/:id',
component:user,
props: route=>({name:'zs', age:40, id: route.params.id }) },
{path:'/register',component:register,children:[
//嵌套路由规则:父路由中加入children属性,数组格式
{path:'/register/tab1',component:tab1},
{path:'/register/tab2',component:tab2}]}
]
})
var vm =new Vue({
el:'#app',
props:[''],
data:{
},
components: {},
router,
computed: {},
beforeMount() {},
mounted() {},
methods: {},
watch: {}
})
</script>
</body>