自定义指令监听组件内抛出的事件,并实现多字段双向绑定

news/2025/3/20 16:26:29/

componentInstance - 指向自定义指令绑定的组件

context - 指向自定义指令所在的组件

Vue.directive('my-model', {
  // bind 钩子:当指令首次绑定到元素时调用
  bind(el, binding, vnode) {
    // 获取绑定的值,例如 v-my-model="message"
    const key = binding.expression;
    // 设置元素的初始值
    el.value = vnode.context[key];

    // 定义事件处理函数
    const eventHandler = function(event) {
      // 更新 Vue 实例的数据
      vnode.context.$set(vnode.context, key, event);
    };

    // 添加事件监听器,监听通过 $emit 抛出的任意事件
    vnode.componentInstance.$on(binding.arg || 'input', eventHandler);

    // 存储事件处理函数,以便在 unbind 钩子中移除
    el._myModelEventHanlder = eventHandler;
  },
  // update 钩子:当绑定值更新时调用
  update(el, binding, vnode) {
    // 确保元素的值与数据保持一致
    const key = binding.expression;
    el.value = vnode.context[key];
  },
  // unbind 钩子:当指令与元素解绑时调用
  unbind(el, binding, vnode) {
    // 移除事件监听器
    vnode.componentInstance.$off(binding.arg || 'input', el._myModelEventHanlder);
  }
});
 


http://www.ppmy.cn/news/1580638.html

相关文章

WPF-实现按钮的动态变化

MVVM 模式基础 视图模型(ViewModel):MainViewModel类作为视图模型,封装了与视图相关的属性和命令。它实现了INotifyPropertyChanged接口,当属性值发生改变时,通过OnPropertyChanged方法通知视图进行更新&am…

[蓝桥杯 2023 省 B] 飞机降落(不会dfs的看过来)

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间,即它最早可以于 T i T_{i} Ti​ 时刻…

Web爬虫利器FireCrawl:全方位助力AI训练与高效数据抓取

Web爬虫利器FireCrawl:全方位助力AI训练与高效数据抓取 一、FireCrawl 项目简介二、主要功能三、FireCrawl应用场景1. 大语言模型训练2. 检索增强生成(RAG):3. 数据驱动的开发项目4. SEO 与内容优化5. 在线服务与工具集成 四、安装…

深度学习有哪些算法?

深度学习包含多种算法和模型,广泛应用于图像处理、自然语言处理、语音识别等领域。以下是主要分类及代表性算法: 一、基础神经网络 多层感知机(MLP) 最简单的深度学习模型,由多个全连接层组成,用于分类和回…

软件安全性测试的重要性和常用工具介绍,软件测试服务公司推荐

在当今数字化快速发展的时代,软件已经成为各行各业不可或缺的一部分。然而,随着软件系统的复杂性增加,安全性问题也愈发突出,因此软件产品生产周期中安全测试必不可少。软件安全性测试是指对软件系统进行评估,以发现潜…

领略算法真谛:01背包问题

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…

docker overlay2 文件夹比较大怎么处理

overlay2 是 Docker 默认的存储驱动,用于管理容器和镜像的存储。当 overlay2 文件夹变得非常大时,通常是由于以下原因: 未清理的镜像和容器:未使用的镜像、停止的容器、悬空的卷等占用了大量空间。日志文件过大:容器生…

STM32原理性知识

文章目录 1、如何在STM32 实现原子操作 2、寄存器是什么?为什么向外设地址写值可以控制外设的状态? 1、如何在STM32 实现原子操作 在CMSIS模块中已经提供了原子操作宏,用于操作16位或32位变量,包括ATOMIC_SET_BIT、ATOMIC_CLEAR_…