Element-UI记录

1,ref

html 复制代码
   <el-form
      ref="formRef"
      :model="form"
      :rules="rules"
      label-width="90px"
      label-position="left"
    >

el-form相当于QTreeWidget,ref相当于QTreeWidget *treeWidget,即UI控件(组件)的实例(指针),通过ref,可以调用组件的方法,比如formRef.value.validate()等,相当于通过treeWidget可以调用QTreeWidget的方法:tree->setColumnCount(3);

2,defineProps

javascript 复制代码
const props = defineProps<{
  sourceNodeId?: number; 
}>();

defineProps 是 Vue 3 中用于声明组件属性 的方法,专门用来接收父组件传递过来的参数。props:是一个响应式对象,包含所有父组件传递的属性值。

父组件传递参数:

html 复制代码
<template>
  <!-- 父组件传递 sourceNodeId 参数 -->
  <MyDialog 
    v-model="dialogVisible" 
    :source-node-id="123"
  />
</template>

命名规范

注意属性名的转换:

  • 父组件中使用 kebab-case (短横线命名):source-node-id
  • 子组件中使用 camelCase (驼峰命名):props.sourceNodeId

Vue 会自动处理这种命名转换。

3,组件的v-model

v-model 的数据类型确实是由组件本身定义的。比如我自己的一个dialog叫MyDialog:

html 复制代码
<template>
  <el-dialog
    v-model="visible"
    ...
    ...

>

/* 脚本部分 */
const visible = defineModel<boolean>();

明确指定 v-model 是 boolean 类型,组件内部需要自己维护v-model的值的变化,比如点了取消按钮,设置visible为false:

javascript 复制代码
const handleCancel = () => {
  visible.value = false;  // 子组件修改值,父组件会同步更新
};

el-dialog 组件本身要求 v-model 必须是 boolean 类型,这个boolean类型就是显示/隐藏的控制变量,内部的类似逻辑是这样的:

javascript 复制代码
// el-dialog 内部伪代码
const modelValue = defineModel<boolean>();

// 监听值变化,自动执行显示/隐藏
watch(modelValue, (newVal) => {
  if (newVal) {
    this.show();      // 显示对话框
  } else {
    this.hide();      // 隐藏对话框
  }
});

这里的MyDialog使用了el-dialog,因此需要给el-dialog设置v-model为bool类型,MyDialog可以设置自己的model类型,但是给el-dialog的model必须是boolean,比如:

javascript 复制代码
// MyDialog 内部
const model = defineModel<{ visible: boolean; data: any }>();

// 需要手动处理显示逻辑
const dialogVisible = computed(() => model.value?.visible ?? false);
html 复制代码
<!-- MyDialog 模板 -->
<el-dialog v-model="dialogVisible">  <!-- 最终还是 boolean -->
相关推荐
嘟嘟07171 分钟前
一文讲通 SPA 前端路由:从传统多页到手写 HashRouter
javascript
柒和远方2 分钟前
V058:前端路由的第一性原理:从 hashchange 手写路由,到 React Router 的嵌套与懒加载
前端·javascript·react.js
冷咖啡离 我的笨笨5 分钟前
通过(Node Js||.Net)基于HTML5的WebSocket实现实时视频文字传输(上)
javascript·.net·html5
张元清20 分钟前
桶文件(Barrel Files):index.ts 统一导出如何拖垮 Tree Shaking、Next.js 开发内存和 tsc
javascript·react.js
名字还没想好☜37 分钟前
React useImperativeHandle 实战:让父组件安全地调用子组件的方法
前端·javascript·react.js·react·forwardref
铁皮饭盒44 分钟前
阿里ASR语音转文字,用JS模拟微信
前端·javascript·后端
柒@宝儿姐1 小时前
若依 B 端从浏览器访问升级为 Windows 安装包交付流程
前端·javascript·vue.js·windows
烬羽11 小时前
React Router v7 完全指南:一个 Demo 吃透前端路由
javascript·react.js·前端框架
烬羽11 小时前
从"整个页面刷新"到"丝滑切换":手写一个 HashRouter 彻底搞懂前端路由
javascript·前端框架·全栈
用户9385156350712 小时前
从零理解 React Router v6:每一个 API 都是怎么工作的
前端·javascript·全栈