Vue3中的组件间传值、依赖注入、双向绑定、获取dom

1.组件间传值、依赖注入、双向绑定

Vue2Vue3
父组件向子组件传值

1.子组件标签上使用自定义属性名来传递父组件data中的数据;

2.子组件内部添加props字段定义数组或者对象,用自定义的属性名来接受父组件的传值;

3.使用时与使用data字段的数据一样;

1.子组件标签上使用自定义属性名来传递父组件data中的数据;

2.子组件内部添加props字段定义数组或者对象,用自定义的属性名来接受父组件的传值;

3.在模板中使用时与之前一样,但在setup函数中,是通过setup的第一个函数props来获取得到的数据;

子组件向父组件传值

1.在子组件的事件监听函数中使用this.$emit定义自定义事件,自定义事件第一个参数是事件名,第二个是传入的参数;

2.在子组件标签上添加自定义事件,并设置自定义事件触发在父组件指定的函数;

3. 在父组件的methods字段添加自定义函数触发的函数,函数的参数是第一步中传递来的数据;

1.在子组件的事件监听函数中使用setup的第二个参数(context对象)的emit函数来定义自定义事件,自定义事件第一个参数是事件名,第二个是传入的参数;

2.子组件添加emits字段来设置发射的自定事件;

3.在子组件标签上添加自定义事件,并设置自定义事件触发在父组件指定的函数;

4. 在父组件的methods字段添加自定义函数触发的函数,函数的参数是第一步中传递来的数据;

总线传值

1.创建一个全局的空组件对象

2.在要发送数据的组件内部使用空组件对象.$emit(’自定义事件‘,传递的数据);

3.在要接受数据的组件的created钩子函数中使用空组件对象.$on('自定义事件',函数-参数为传递的数据)

将总线传值移除了vue的核心文件
双向数据绑定

1.子组件标签上使用(v-model='要传递的数据')绑定父组件要传递的数据;

2.子组件props字段接收,默认接受v-model的属性名为value(必须为value);

3.在事件函数中发射自定义事件(自定义的事件名必须为input,第二个参数为更改父组件传过来的数据)

1.子组件标签通过(v-model:自定义接受属性名=‘传递的属性值’)来传递要双向绑定的数据;

2.子组件通过props的自定义属性名接受;

3.在事件函数中发射自定义事件(自定义的事件名必须为update:自定义属性名,第二个参数为更改父组件传过来的数据)

4.在子组件的emits字段中定义数组来管理发射的自定义事件

依赖注入

1.要传递数据的组件:使用provide字段函数,返回一个对象,对象属性名为接受的字段名,属性值是接受的字段值;

2.接受的子孙组件:使用inject的数组字段,使用字段名接收,然后在页面使用时候要加上this,且不具有响应式特点;

1.要传递给子孙组件的组件:在setup的函数中使用Vue.provide('自定义字段名',字段值)

2.接受的子孙组件:在setup的函数中使用一个变量接收Vue.inject(['count']);

2.查找dom

vue2:给标签添加ref属性并设置一个查找名,然后使用this.$refs.查找名来获取dom;

vue3:给标签添加ref属性并设置一个响应式数据为ref属性的值;在事件函数中使用该响应数据.value来获取dom节点;在setup函数中该响应数据.value显示为响应数据的值;

绑定了ref属性的响应式数据不能再在页面渲染的时候使用;

 2.1代码

<div id="root">
    父组件信息:{{count}}这个count绑定了ref,就不能渲染
    <hr>
    {{num}}
    <!-- 1.ref绑定的是一个响应式数据 -->
    <button ref="count">点击增加</button>
    <br>
</div>
// 根组件
const app = Vue.createApp({
    setup() {
        var count = Vue.ref(0);
        var num = Vue.ref(0);
        // 参数1 字段名 参数2 字段值
        Vue.onMounted(()=>{
            // 2.获取标签,通过绑定数据的value属性
            console.log(count.value);
            count.value.addEventListener('click',()=>{
                add();
            })
        })
        function add(params) {
            num.value++;
        }
        return {
            count,
            num
        }
    }
})

const vm = app.mount('#root');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值