uniapp传值集(3)

//组件穿透值传递
//允许一个祖先组件向其所有子孙后代组件注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。

/*<uni-popup ref="popup" type="dialog" :maskClick="true">
    <uni-popup-dialog
	     type="input" 
	     message="成功消息" 
	     :duration="2000" 
	     :before-close="true" 
	     @close="close" 
	     @confirm="confirm">
     </uni-popup-dialog>
</uni-popup>*/

//popup.js
const config={
	// 顶部弹出
	top:'top',
	// 底部弹出
	bottom:'bottom'
}
export default {
	data(){
		return {
			config:config
		}
	}	
}


//uni-popup 
import popup from './popup.js'
export default {  //注入一个依赖
	props: {
		maskClick:{ 
			type: [ Number,String],
			default: false
		}
	},
	provide() {
		return {
			// 父组件中返回要传给下级的数据 eg:this.maskClick  this.方法名
			popup: this //子代可以同popup 来访问当前实例中的属性和方法
			//将当前实例全部注入 后代
		}
	},
	mixins: [popup],//混入
	//mixins 选项接收一个混入对象的数组。这些混入对象可以像正常的实例对象一样包含实例选项,
	//这些选项将会被合并到最终的选项中,使用的是和 Vue.extend() 一样的选项合并逻辑。
	
	//Vue.mixin() 可以将自定义的方法混入所有的 Vue 实例中,谨慎使用
	//全局注册一个混入,影响注册之后所有创建的每个 Vue 实例  ,全局混入接受一个对象
	data() {
		return {
			otitle:"症状查询",
			ntitle:"筛选"
		};
	},
	methods:{
		close() {
			this.$emit('change', { //调用当前实例的方法  eg:关闭当前弹窗
				show: false,
				type: this.type
			})
			//可以访问config   混入
				this.connfig.top   ...	
			}
	}
	
}

//uni-popup-dialog
//子代组件中
export default {
	props: {
		type: {
			type: [String, Number],
			default: ''
		},
		placeholder: {
			type: [String, Number],
			default: '请输入内容'
		}
	},
	data() {
		return {
		};
	},
	inject: ['popup'],// 依赖 provide 的注入名
	methods:{
		close() {
			this.popup.close()  //调用uni-popup 的关闭弹窗时间
		}
	}
}

### UniApp 组件间的方法 在 UniApp 中,组件间的可以通过多种方式实现。以下是几种常见的方法及其具体实现: #### 方法一:父子组件之间的 父组件向子组件通常通过 `props` 实现,而子组件向父组件则可以借助 `$emit`。 ##### 父组件向子组件 父组件定义一个数据项并通过属性绑定的方式将其递给子组件。 子组件通过 `props` 来接收这些数据并使用它们。 ```vue <!-- Parent.vue --> <template> <view> <child-component :message="parentMessage"></child-component> </view> </template> <script> import ChildComponent from &#39;./ChildComponent.vue&#39;; export default { components: { ChildComponent }, data() { return { parentMessage: &#39;这是来自父组件的消息&#39; }; } }; </script> ``` ```vue <!-- ChildComponent.vue --> <template> <view>{{ message }}</view> </template> <script> export default { props: [&#39;message&#39;] }; </script> ``` 上述代码展示了如何从父组件向子组件递消息[^1]。 ##### 子组件向父组件 子组件通过调用 `$emit` 将事件触发到父组件上,父组件监听此事件即可获取子组件的数据。 ```vue <!-- ChildComponent.vue --> <template> <button @click="sendDataToParent">发送数据到父组件</button> </template> <script> export default { methods: { sendDataToParent() { this.$emit(&#39;custom-event&#39;, &#39;这是来自子组件的数据&#39;); } } }; </script> ``` ```vue <!-- Parent.vue --> <template> <view> <child-component @custom-event="handleCustomEvent"></child-component> <text>接收到的数据:{{ receivedData }}</text> </view> </template> <script> import ChildComponent from &#39;./ChildComponent.vue&#39;; export default { components: { ChildComponent }, data() { return { receivedData: &#39;&#39; }; }, methods: { handleCustomEvent(data) { this.receivedData = data; } } }; </script> ``` 以上代码实现了子组件向父组件的单向通信[^1]。 --- #### 方法二:页面跳转时携带参数 当需要在一个页面导航至另一个页面时,可以通过 URL 参数的形式递数据。 ```javascript // 跳转前设置参数 uni.navigateTo({ url: &#39;/pages/targetPage/targetPage?param=value&#39; }); ``` 目标页面可以在其生命周期函数中解析这些参数: ```javascript // targetPage.js onLoad(options) { console.log(options.param); // 输出 value } ``` 这种方式适用于简单的跨页面场景[^2]。 --- #### 方法三:全局状态管理 (Vuex 或 Pinia) 对于更复杂的应用程序结构,推荐使用 Vuex 或 Pinia 进行全局状态管理。这允许任何地方都可以访问共享的状态变量。 安装 Vuex 后,在 store 文件夹下创建 state 和 mutations 定义如下: ```javascript // store/index.js const state = { sharedValue: &#39;初始&#39;, }; const mutations = { updateSharedValue(state, newValue) { state.sharedValue = newValue; }, }; export default { state, mutations, }; ``` 然后在任意 Vue 组件中修改或读取这个: ```javascript this.$store.commit(&#39;updateSharedValue&#39;, &#39;新&#39;); // 修改 console.log(this.$store.state.sharedValue); // 获取 ``` 这种方法适合于多处都需要同步更新某些特定数据的情况。 --- ### 总结 UniApp 提供了灵活的方式来处理不同层次上的组件交互需求——无论是基础层面还是高级应用架构设计都得到了良好支持。开发者可以根据实际项目的需求选择最合适的方案来完成所需功能开发工作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值