Vue3 组件常用API封装

目录结构:

 

1、插件:instance

import {
	ref,
	reactive,
	watch,
	computed,
	onMounted,
	getCurrentInstance
} from "vue";
export default function() {
	let {proxy} = getCurrentInstance();
	console.log(proxy);
	proxy.ref=ref
	proxy.reactive=reactive
	proxy.watch=watch
	proxy.computed=computed
	proxy.onMounted=onMounted
	return proxy
}

2、父组件:layout

<template>
    <div>
	    <filterC ref="filter" :count="count"  @save="commit"></filter
	    <button @click="plus">+</button>
	    <button @click="minu">-</button>
    </div>
</template>
<script setup>
	import filterC from "./filter.vue"
	import getInstance from "./instance.js"
	const that=getInstance()
	const count=that.ref(2)
	function commit(body){
		count.value++
		console.log(JSON.stringify(body));
	}
	function plus(){
		that.$refs.filter.plus(2,3)
	}
	function minu(){
		that.$refs.filter.minu(2)
	}
</script>

3、子组件filter:

<template>
	<h1>{{sum}}</h1>
	<h1>{{sum2}}</h1>
	<h2>{{porps.count}}</h2>
	<input v-model="body.name" placeholder="请输入用户名"/>
	<input v-model="body.password" placeholder="请输密码"/>
	<button @click="commit">确定<</button>
</template>

<script setup>
	import getInstance from "./instance.js"
	const porps=defineProps(["count"]);
	defineEmits(["save"]);
	defineExpose({plus,minu})
	let that = getInstance();
	const body = that.reactive({ name: "", password: "" });

	function commit() {
		that.$emit("save", body);
	}
	const sum=that.ref(0)
	const sum2 =that.computed(()=>{
		return sum.value*2
	})
	that.watch(sum,(nv,ov)=>{
		console.log(ov);
		console.log(nv);
	})
	that.watch(()=>porps.count,(nv,ov)=>{
		console.log(ov);
		console.log(nv);
	})
	function plus(a,b){
		sum.value+=a+b
	}
	function minu(a){
		sum.value=sum.value-2
	}
</script>

<style>
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值