vue----webpack模板----路由传值

1.路由传值的3种方式

通过动态路由<route-link>进行传值

1
.params传值 2.query传值 3.路由解耦

1.params传值(传值时,必须使用name属性,不能使用path属性

index.js路由配置项

path:
"/details/:name/:price/:id",//属性可写可不写, 如果写了,就必须传相应的值,也可传其它的,地址栏中只显示配置的属性及值如如果没有写,地址栏中不显示,但值能传递过去
路由跳转(进行传值)
<router-link :to="{name:'details',params:{name:item.goodsName, price:item.goodsPrice, id:index, a:1, b:2}}"

组件中接收值:(在data中进行接收值,因为可以访问到vue身上的所有属性) details.js(接收值) created(){
// console.log(this.$route) this.goodsName = this.$route.params.name; this.goodsPrice = this.$route.params.price; }

2.query传值

index.js路由配置项

path:
"/details/:name/:price/:id", //属性可写可不写,传值的个数不受index.js配置项的限制,所传的值都会在地址栏中显示 路由跳转(进行传值) <router-link :to="{name:'details',query:{name:item.goodsName, price:item.goodsPrice, id:index, a:1, b:2}}" details.js(接收值) created(){ // console.log(this.$route) this.goodsName = this.$route.query.name; this.goodsPrice = this.$route.query.price; }
 
3.路由解耦(必须用params传值,否则props接收不到,必须配置props:true )
 
index.js路由配置项

path:
"/details/:name/:price/:id", props:true //属性可写可不写,传值的个数不受index.js配置项的限制,值都能传过去,但是,地址栏中只显示配置了的属性及对应的值 路由跳转(进行传值) <router-link :to="{name:'details',params:{name:item.goodsName, price:item.goodsPrice, id:index, a:1, b:2}}" details.js(接收值),接收的值可以直接使用 props:["name","price","id","a","b"]

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

应用举例

由商品列表 查看 商品的详细信息
点击不同的商品,跳转到相同的路由,/details,但是传的值是不同的
params传值代码如下:
配置:
{
        //方式1:param,属性必须写
        path:"/details/:name/:price/:id",//属性可不写, 如果写了,就必须传相应的值,地址栏中只显示配置的属性及值,如如果没有写,地址栏中不显示,但值能传递过去
        name:"details",
        component:details
}
------------------------------------------------------------------------------------- 
商品列表:(传值)
 
    <li v-for="(item,index) in goodslist">
                <!--第一种传值方式: "'/details/' + item.goodsName + '/' + item.goodsPrice + '/' + index" -->
                <!-- 第二种: <router-link :to="{name:'details',params:{name:item.goodsName,price:item.goodsPrice,id:index,a:1,b:2}}" > -->
                                                                                                                                                                                              
                <router-link :to="{name:'details',params:{name:item.goodsName,price:item.goodsPrice,id:index}}" >//传值的个数不受配置项中属性的限制,只是,在完全不设置属性时,详情页能接收到所有的值,但url地址中不显示,,,,,,,,如果设置了属性,必须要传属性对应的值(否则报错)也可以穿未定义属性的值,详情页能接收到所有的值,但是地址中只显示配置的属性 及对应的值
                    <p>{{item.goodsName}}</p>
                    <p>{{item.goodsPrice}}</p>
                </router-link>
 
            </li>
------------------------------------------------------------------------------------------------ 
详情页:(接收值 )
export default {
        data(){
            return{
                goodsName:"",
                goodsPrice:""
            }
        },
        created(){
            // console.log(this.$route)
            this.goodsName = this.$route.params.name;
            this.goodsPrice = this.$route.params.price;
        }
 
}
 
详情页:
 
 
当写属性时:(传值的个数和定义的属性不是对应的,自己写的属性及值也会传过去,地址中只会显示配置的属性及值,为配置的不显示)
当不写属性时(值会传过去,但是在地址中不显示)
 
 
query传值如下:
 
配置:
{
        //方式1:param,属性可不写
        path:"/details",//属性可写可不写,地址栏中会显示传递的所有值
        name:"details",
        component:details
}
-------------------------------------------------------------------------------------------------------- 
商品列表:(传值)
 
    <li v-for="(item,index) in goodslist">
              
                <router-link :to="{name:'details',query:{name:item.goodsName,price:item.goodsPrice,id:index,a:1,b:2}}" >//传值的个数不受index.js配置项的限制,所传的值都会在地址栏中显示
                    <p>{{item.goodsName}}</p>
                    <p>{{item.goodsPrice}}</p>
                </router-link>
 
            </li>
-------------------------------------------------------------------------------------------------------------------- 
详情页:(接收值 )
export default {
        data(){
            return{
                goodsName:"",
                goodsPrice:""
            }
        },
        created(){
            // console.log(this.$route)
            this.goodsName = this.$route.query.name;
            this.goodsPrice = this.$route.query.price;
        }
 
}
 
 
 
 
 
 
props传值如下:
 
配置:
{
        path:"/details",
        name:"details",
        component:details,
        props:true
}
-------------------------------------------------------------------------------------------------- 
商品列表:(传值)
 
    <li v-for="(item,index) in goodslist">
              
                <router-link :to="{name:'details',params:{name:item.goodsName,price:item.goodsPrice,id:index,a:1,b:2}}" >
                    <p>{{name}}</p>
                    <p>{{price}}</p>
                </router-link>
 
            </li>
 -------------------------------------------------------------------------------------------------
详情页:(接收值 )
export default {
        data(){
            return{
                goodsName:"",
                goodsPrice:""
            }
        },
        props:["name","price","id","a","b"]//接收传来的值
        created(){
        
        }
 
}
 
 
 
 
 
未配置属性
 
配置了属性
 

猜你喜欢

转载自www.cnblogs.com/SRH151219/p/10426932.html
今日推荐