====== 一、父子组件传值========
1、父组件可以使用 props 把数据传给子组件。
2、子组件可以使用 $emit,让父组件监听到自定义事件 。
vm.$emit( event, arg ) //触发当前实例上的事件
vm.$on( event, fn );//监听event事件后运行 fn;
例如:子组件:
<template> <div class="train-city"> <h3>父组件传给子组件的toCity:{{sendData}}</h3> <br/><button @click='select(`大连`)'>点击此处将‘大连’发射给父组件</button> </div> </template> <script> export default { name:'trainCity', props:['sendData'], // 用来接收父组件传给子组件的数据 methods:{ select(val) { let data = { cityname: val }; this.$emit('showCityName',data);//select事件触发后,自动触发showCityName事件 } } } </script>
父组件:
<template> <div> <div>父组件的toCity{{toCity}}</div> <train-city @showCityName="updateCity" :sendData="toCity"></train-city> </div> <template> <script> import TrainCity from "./train-city"; export default { name:'index', components: {TrainCity}, data () { return { toCity:"北京" } }, methods:{ updateCity(data){//触发子组件城市选择-选择城市的事件 this.toCity = data.cityname;//改变了父组件的值 console.log('toCity:'+this.toCity) } } } </script>
图一:点击之前的数据
图二:点击之后的数据
====== 二、页面跳转传值========
页面跳转传值:
pages/pre/pre.vue
<template> <view> <view>返回的数据为:</view> <view>id: {{testdata.id}}</view> <view>name: {{testdata.name}}</view> <button type="primary" @click="goNext">跳转到下一页面</button> </view> </template> <script> export default { data() { return { testdata: { id: '', name: '' } } }, onShow() { let that = this uni.$on('updateData',function(data){ that.testdata = data const params = 'id:'+data.id+', name:'+data.name; console.log('监听到事件来自 updateData ,携带参数为:' + params); }) }, methods: { goNext() { uni.navigateTo({ url: '/pages/next/next' }) } } } </script> <style> </style>
pages/next/next.vue
<template> <view> <button type="primary" @click="goBack">点击返回上一页</button> </view> </template> <script> export default { data() { return { mydata: { id: 1, name: 'test' } } }, methods: { goBack() { uni.$emit('updateData', this.mydata) uni.navigateBack({ delta: 1 }) } } } </script> <style> </style>
另一种页面传值方法(h5和小程序有区别),非页面传参类型:
pages/pre/pre.vue
<template> <view> <view>返回的数据为:</view> <view>id: {{testdata.id}}</view> <view>name: {{testdata.name}}</view> <button type="primary" @click="goNext">跳转到下一页面</button> </view> </template> <script> export default { data() { return { testdata: { id: '', name: '' } } }, onShow() { let pages = getCurrentPages(); let currPage = pages[pages.length - 1]; //当前页面 let json = currPage.data.testdata; this.testdata = json; }, methods: { goNext() { uni.navigateTo({ url: '/pages/next/next' }) } } } </script> <style> </style>
pages/next/next.vue
<template> <view> <button type="primary" @click="goBack">点击返回上一页</button> </view> </template> <script> export default { data() { return { mydata: { id: 1, name: 'test' } } }, methods: { goBack() { var pages = getCurrentPages(); var prevPage = pages[pages.length - 2]; // #ifdef H5 prevPage.$vm.testdata = this.mydata; // #endif // #ifdef MP-WEIXIN prevPage.setData(this.mydata); // #endif uni.navigateBack({//返回 delta: 1 }) } } } </script> <style> </style>
转 : https://blog.csdn.net/sllailcp/article/details/78595077
https://blog.csdn.net/qq2942713658/article/details/114581476