vue学习十五(props解耦、props 布尔-对象-函数三种模式)
文章目录$route耦合props解耦props 布尔模式props对象模式props函数模式$route耦合在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。<!DOCTYPE html><html lang="en"><head&
·
$route耦合
在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.0.1/dist/vue-router.js"></script>
</head>
<body>
<div id="box">
<router-link to="/one/1">One</router-link>
<router-view></router-view>
</div>
<!--定义模版-->
<template id="Foo">
<div>
第一个router {{$route.params.id}}
</div>
</template>
<script>
//1、定义 (路由) 模版组件
//2、定义路由
var routes = [
{
path: "/one/:id",
component: { template: "#Foo" },
props: true
}
];
// 3、创建 router 实例
var router = new VueRouter({
routes
});
// 4、创建和挂载根实例
const app = new Vue({
router
}).$mount('#box')
</script>
</body>
</html>
浏览器输入file:///Users/zhiliao/zhiliao/vue/index_test.html#/one/1
输出如下:
One
第一个router 1
props解耦
props 布尔模式
如果 props 被设置为 true,route.params 将会被设置为组件属性。
<body>
<div id="box">
<router-link to="/one/1">One</router-link>
<router-view></router-view>
</div>
<!--定义模版-->
<template id="Foo">
<div>
{{id}}
</div>
</template>
<script>
const Foo = {
props: ['id'],
template: "#Foo",
}
//1、定义 (路由) 模版组件
//2、定义路由
var routes = [
{
path: "/one/:id",
component: Foo,
props: true
}
];
// 3、创建 router 实例
var router = new VueRouter({
routes
});
// 4、创建和挂载根实例
const app = new Vue({
router
}).$mount('#box')
</script>
</body>
测试结果如下:
file:///Users/zhiliao/zhiliao/vue/index_test.html#/one/1
浏览器输出如下:
One
1
props对象模式
<body>
<div id="box">
<router-link to="/one/1">One</router-link>
<router-view></router-view>
</div>
<!--定义模版-->
<template id="Foo">
<div>
{{userName}}
</div>
</template>
<script>
const Foo = {
props: ['userName'],
template: "#Foo",
}
//1、定义 (路由) 模版组件
//2、定义路由
var routes = [
{
path: "/one/:id",
component: Foo,
props:{
userName: 'mapbar_front'
}
}
];
// 3、创建 router 实例
var router = new VueRouter({
routes
});
// 4、创建和挂载根实例
const app = new Vue({
router
}).$mount('#box')
</script>
</body>
浏览器效果如下:
file:///Users/zhiliao/zhiliao/vue/index_test.html#/one/1
浏览器渲染如下:
One
mapbar_front
props函数模式
你可以创建一个函数返回 props。这样你便可以将参数转换成另一种类型,将静态值与基于路由的值结合等等。
<body>
<div id="box">
<router-link to="/one/1">One</router-link>
<router-view></router-view>
</div>
<!--定义模版-->
<template id="Foo">
<div>
{{userName}}
{{id}}
</div>
</template>
<script>
const Foo = {
props: ['userName',"id"],
template: "#Foo",
}
//1、定义 (路由) 模版组件
//2、定义路由
var routes = [
{
path: "/one/:id",
component: Foo,
// props:{
// userName: 'mapbar_front'
// },
props: (route) => (
{
userName: "mapbar_front",
id: route.params.id
}
)
}
];
// 3、创建 router 实例
var router = new VueRouter({
routes
});
// 4、创建和挂载根实例
const app = new Vue({
router
}).$mount('#box')
</script>
</body>
浏览器输入
file:///Users/zhiliao/zhiliao/vue/index_test.html#/one/1
效果输出如下:
One
mapbar_front 1
更多推荐
已为社区贡献11条内容
所有评论(0)