Vue3封装自定义指令+h()

news2024/9/22 7:32:32

官方install介绍
在这里插入图片描述directive/myDir/index.js
定义指令

import { h, render, ref } from "vue";
const vMyDir = {
  mounted(el, binding) {
    renderElement(el, binding);
  },
};
// inserted是Vue2的生命周期钩子,所以在Vue3项目中要使用mounted
const renderElement = (el, binding) => {
  // el就是指令所绑定的元素,binding.value是传进来的指令值
  console.log(el, binding.value);

  // el.innerHTML获取元素的文本内容
  console.log(el.innerHTML);

  // el.style.color = binding.value.color;
  // el.style.backgroundColor = "green";
  // const foo = { fontSize: "30px" };

  const foo = "some-name";
  let isActive = ref(true);

  const style1 = {
    color: "pink",
  };

  const style2 = {
    color: "pink",
    backgroundColor: "green",
  };
  let myStyle;
  if (isActive.value) {
    myStyle = style2;
  } else myStyle = style1;
  const vnode = h(
    "div",
    { class: [foo], style: myStyle },
    //   { class: [foo], style: { color: "pink" } },
    //   {
    //     class: { foo: isActive.value },
    //     style: { color: "pink", backgroundColor: "green" },
    //   },
    "hello"
  );

  render(vnode, el);
};
export default vMyDir;


index.vue 使用指令

<div class="vvv" v-my-dir="{ color: 'red' }">999</div>




directives/index.js

import myDir from "./myDir";
import closeTo from "./closeTo";
// 指令对象
const directives = {
  myDir,
  closeTo,
};

export default {
  install(app) {
    console.log("directives", directives);

    console.log("Object.keys(directives)", Object.keys(directives));

    Object.keys(directives).forEach((key) => {
      console.log("key, directives[key]", key, directives[key]);

      app.directive(key, directives[key]);
    });
  },
};
// Object.keys(directives).forEach((key) => { ... }):这是一个遍历指令对象 directives 的循环。
// Object.keys() 方法返回一个包含指令对象中所有属性名称的数组。
// app.directive(key, directives[key]):使用Vue的directive方法注册指令。
// key 是指令名称,directives[key] 是对应的指令对象。通过这个循环,将所有的指令都注册到应用程序中。

在这里插入图片描述



main.js
import { createApp } from "vue";
import { createPinia } from "pinia";
import "virtual:uno.css";
import App from "./App.vue";
import router from "./router";
import directives from "./directives";
const app = createApp(App);
app.use(directives);

app.use(createPinia());
app.use(router);

app.mount("#app");


在其他dom上绑定元素

在这里插入图片描述directive/myDir/index.js

import { h, render, ref } from "vue";
const vMyDir = {
  mounted(el, binding) {
    renderElement(el, binding);
  },
};

const renderElement = (el, binding) => {
  // binding.value 是指绑定到指令的值,而不是指令所在元素的引用。
  // 如果你希望访问 father 变量所引用的元素,
  // 你应该使用 binding.instance 来获取指令所在的组件实例,
  // 然后通过 binding.instance.$refs 来访问 father 引用的元素。
  const fatherElement = binding.instance.$refs.father;
  console.log(fatherElement); // 打印出绑定到 "father" 的元素
  console.log("binding.instance", binding.instance);
  //   请注意,在 Vue 3 中,
  //   除了 binding.value 和 binding.instance,binding.arg 和 binding.modifiers 字段也是可用的,
  //   以提供更多配置和参数信息

  const foo = "some-name";
  let isActive = ref(true);

  const style1 = {
    color: "pink",
  };

  const style2 = {
    color: "pink",
    backgroundColor: "green",
  };
  let myStyle;
  if (isActive.value) {
    myStyle = style2;
  } else myStyle = style1;
  const vnode = h("div", { class: [foo], style: myStyle }, "hello");

  render(vnode, fatherElement); //!!!!!!!!!!!!!
  //   render(vnode, el);
};
export default vMyDir;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1202406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫从基础到入门:找数据接口

Python爬虫从基础到入门:找数据接口 1. 怎样判断抓取的数据是动态生成的2. 用requests模块访问,然后用解析模块解析数据3. 总结1. 怎样判断抓取的数据是动态生成的 请参考文章:Python爬虫从基础到入门:认识爬虫 第3点所讲。 这里用我的CSDN个人主页举例。 可以说这部分下的…

对比国内主流开源 SQL 审核平台 Yearning vs Archery

Yearning, Archery 和 Bytebase 是目前国内最主流的三个开源 SQL 审核平台。其中 Yearning 和 Archery 是社区性质的项目&#xff0c;而 Bytebase 则是商业化产品。通常调研 Bytebase 的用户也会同时比较 Yearning 和 Archery。 下面我们就来展开对比一下 Yearning 和 Archery…

JDK 17 安装过程 Windows10

官网下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java17 选择JDK17&#xff0c;并选择Windows版本&#xff0c;点击x64 Installer的下载链接。 下载要是有问题可以从笔者网盘自取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1tvT2-l…

拟液态加载器

效果展示 CSS 知识点 SVG 的 feGaussianBlur、feColorMatrix 属性运用animation 属性运用filter 联合 SVG 使用 整体页面结构 <div class"container"><h2>Milk</h2><!-- 加载器的圆点部分 --><div class"loader"><spa…

mac配置双网卡 mac同时使用内网和外网

在公司办公通常都会连内网&#xff0c;而连内网最大的限制就是不可以使用外网&#xff0c;那遇到问题也就不能google&#xff0c;而当连接无线的时候&#xff0c;内网的东西就不可以访问&#xff0c;也就不能正常办公&#xff0c;对于我这种小白来说&#xff0c;工作中遇到的问…

研究前沿 | Science:单细胞测序助力绘制迄今最完善的灵长类动物前大脑发育图谱

引言 大脑发育的关键分子机制在啮齿动物中已有所了解&#xff0c;但在灵长类动物中仍然不清楚&#xff0c;这限制了研究者对高级认知能力起源和功能障碍的理解。此外&#xff0c;在包括人类在内的灵长类动物中&#xff0c;关于轴突投射路径上的丘脑区域和皮层区域多样化的早期分…

idea2023启动springboot项目如何指定配置文件

方法一&#xff1a; 方法二&#xff1a; 举例&#xff1a;

第七章 块为结构建模 P5|系统建模语言SysML实用指南学习

仅供个人学习记录 应用泛化对分类层级建模 继承inherit更通用分类器的公共特性&#xff0c;并包含其他特有的附加特性。通用分类器与特殊分类器之间的关系称为泛化generalization 泛化由两个分类器之间的线条表示&#xff0c;父类端带有空心三角形箭头 块的分类与结构化特性…

外贸开发信邮箱如何选?群发邮件有效技巧?

外贸开发信邮箱用哪种好&#xff1f;QQ邮箱群发邮件怎么发&#xff1f; 一个有效的外贸开发信邮箱可以帮助您建立联系、推销产品&#xff0c;并与潜在客户进行沟通。在本文中&#xff0c;蜂邮EDM将分享一些关于如何选择外贸开发信邮箱的建议&#xff0c;以确保您能够与全球客户…

回顾 — SFA:简化快速 AlexNet(模糊分类)

模糊图像的样本 一、说明 在本文回顾了基于深度学习的模糊图像分类&#xff08;SFA&#xff09;。在本文中&#xff1a;Simplified-Fast-AlexNet (SFA)旨在对图像是否因散焦模糊、高斯模糊、雾霾模糊或运动模糊而模糊进行分类。 二、大纲 图像模糊建模简要概述简化快速 AlexNet…

正点原子嵌入式linux驱动开发——Linux IIO驱动

工业场合里面也有大量的模拟量和数字量之间的转换&#xff0c;也就是常说的ADC和DAC。而且随着手机、物联网、工业物联网和可穿戴设备的爆发&#xff0c;传感器的需求只持续增强。比如手机或者手环里面的加速度计、光传感器、陀螺仪、气压计、磁力计等&#xff0c;这些传感器本…

卡尔曼滤波器第 1 部分 - 简介

一、说明 这是卡尔曼滤波器系列的第一部分。但这并不是另一本定义繁重的读物&#xff0c;它会给你带来一堆行话和方程式&#xff01;在本文中&#xff0c;我们首先关注需要解决方案的问题&#xff08;当然是卡尔曼滤波器&#xff09;&#xff0c;然后直观地了解卡尔曼滤波器。只…

企业app软件定制开发的特点

企业app软件定制开发的特点 随着移动互联网时代的到来&#xff0c;企业越来越意识到拥有自己的企业app对于提升企业形象、增强市场竞争力的重要性。然而&#xff0c;面对市面上众多的app软件&#xff0c;企业往往需要根据自身的需求和特点进行定制开发。 首先&#xff0c;企业a…

培养财务团队协作,冲破市场经济逆境

在过去&#xff0c;企业财务发展道路上往往只有分析师&#xff0c;财务分析也十分简单&#xff0c;只需要业务上挖掘部分有用数据或做一些简单的“数学题”。这些内容都是由财务分析师来完成的。但随着科技发展、大数据时代的到来&#xff0c;越来越多的企业发现还有许多其他未…

生产企业都期望的制造成本核算总平台(ODOO16)

产品制造成本决定了企业的销售策略以及市场竞争力&#xff0c;因此生产企业财务核心的任务就是准确、及时的核算产品制造成本&#xff0c;面对复杂的业务环节、经营数据&#xff0c;欧易创ODOO业财一体系统到底如何全面核算制造成本的呢&#xff1f;接下来我们详细介绍制造成本…

基于Python+Django的酒店管理系统网站平台开发

一、介绍 酒店管理系统。基于Python开发&#xff0c;前端使用HTML、CSS、BootStrap等技术搭建页面&#xff0c;后端使用Django框架处理用户响应请求&#xff0c;主要功能如下&#xff1a; 分为普通用户和管理员两个角色普通用户&#xff1a;登录、注册、查看房间详情、收藏、…

图像实时采集系统

本方案主要在于解决图像实时采集系统对算法校正的仿真实验&#xff0c;以及采集卡接收电路的验证。 由于图像实时跟踪处理系统需要大量的外场景实验&#xff0c;大部分时候只能通过采集的现场图像以在电脑软件中读取图片的形式来进行验证算法&#xff0c;而无法通过采集卡对接…

企业计算机中了eking勒索病毒如何解毒,eking勒索病毒文件恢复

网络技术的不断发展&#xff0c;为企业的生产生活提供了极大便利&#xff0c;但随之而来的网络安全威胁也不断增加&#xff0c;近期&#xff0c;很多企业的计算机服务器遭到了eking勒索病毒攻击&#xff0c;导致企业的计算机服务器所有数据被加密&#xff0c;无法正常使用&…

thinkPHP8 调试

方法一&#xff1a; config/app.php 把‘config/app.php’ 里面的 ‘show_error_msg’ > false, 改成true; 这样如果网页找不到内容就会显示出具体原因 方法二&#xff1a;.example.env 重命名 为 .env 修改成.env&#xff0c;修改后如果没有找到方法&#xff0c;则会提示…

【深度学习】pytorch——常用工具模块

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 深度学习专栏链接&#xff1a; http://t.csdnimg.cn/dscW7 pytorch——常用工具模块 数据处理 torch.utils.data模块DatasetDataLoadersamplertorch.utils.data的使用 计算机视觉工具包 torchvisiontorchvision.d…