IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue3+ts:render极简demo -- 引入element ui el-input组件 -> 正文阅读

[JavaScript知识库]vue3+ts:render极简demo -- 引入element ui el-input组件

一、示例一:

父组件:

<template>
  <div class="home">
    <render-input
      :msg="title"
      @updateMsg="updateMsg"
    >
    </render-input>
  </div>
</template>

<script lang="ts">
import { Options, Vue } from 'vue-class-component';
import renderInput from './components/render-components2.vue';

@Options({
  components: {
    renderInput,
  },
})
export default class Home extends Vue {
  public title = 'title'
  public updateMsg(val:any){
    console.log('23um', val)
    this.title = val
  }
}
</script>

子组件:

<script lang="ts">
import { ElInput } from "element-plus";
import { defineComponent, h, watch } from "vue";

export default defineComponent({
  props: {
    msg: {
      type: String,
      default: '',
    },
  },
  emits: ['updateMsg'],
  setup(props, { emit, attrs }: any) {
    return (props:any) => {
      watch(
        props.msg,
        (val) => {
          console.log('18', val)
        },
        { immediate: true }
      )
      return h(
        "div", // 标签,只写标签名,不写<>
        { // 属性
          ref: 'test-render-ref',
          class: 'test-render-class',
          // innerHTML: 'test-render-html' // 这里打开后子元素里边innerHTML内容不能展示
        },
        [ // 子元素
          h(ElInput,{
            ...ElInput.$el,
            ...ElInput.$attrs,
            class: 'test-render-class-child',
            placeholder: '请输入内容',
            style: {
              color: 'FF0000'
            },
            modelValue: props.msg,
            "onUpdate:modelValue": ($event:any) => {
              console.log('25', $event)
              console.log('27', ElInput)
              emit('updateMsg', $event)
            },
          })
        ]
      );
    };
  }
})
</script>

这里通过emit调用父组件的方法,改变值,然后再次单向数据流传递到子组件,子组件input数据更新。

这种方法在父组件定义数据,在子组件实现逻辑,再返回数据到父组件,个人认为是适合封装复杂组件的。

二、示例二:

<script lang="ts">
import { ElInput } from "element-plus";
import { defineComponent, h, ref } from "vue";

export default defineComponent({
  props: {
    msg: {
      type: String,
      default: '',
    },
  },
  emits: ["updateMsg"],
  setup(props, { emit, attrs }: any) {
    return () => {
      let inputValue = ref("123456");
      return h(
        "div", // 标签,只写标签名,不写<>
        {
          // 属性
          ref: "test-render-ref",
          class: "test-render-class",
          // innerHTML: 'test-render-html' // 这里打开后子元素里边innerHTML内容不能展示
        },
        [
          // 子元素
          h(
            ElInput,
            {
              ...ElInput.$el,
              ...ElInput.$attrs,
              class: "test-render-class-child",
              placeholder: "请输入内容",
              style: {
                color: "FF0000",
              },
              modelValue: inputValue.value,
              "onUpdate:modelValue": ($event: any) => {
                // 实现了数据更新
                return (inputValue.value = $event.target.value);
              }
            }
          )
        ]
      )
    }
  }
})
</script>

在"onUpdate:modelValue"?里实现修改后的值

三、示例三:

父组件:

<template>
  <div class="home">
    <render-input
      :msg="title"
      @updateMsg="updateMsg"
    >
    </render-input>
  </div>
</template>

<script lang="ts">
import { Options, Vue } from 'vue-class-component';
import renderInput from './components/renderDiv.vue';

@Options({
  components: {
    renderInput,
  },
})
export default class Home extends Vue {
  public title = 'title'
  public updateMsg(val:any){
    console.log('23um', val)
    this.title = val
  }
}
</script>

子组件:

<script lang="ts">
import { ElInput } from "element-plus";
import { defineComponent, h, ref } from "vue";

export default defineComponent({
  props: {
    msg: {
      type: String,
      default: '',
    },
  },
  emits: ["updateMsg"],
  setup(props, { emit, attrs }: any) {
    return () => {
      let inputValue = ref("123456");
      console.log('16inputValue', inputValue.value)
      if(props.msg){
        inputValue.value = props.msg
      }
      return h(
        "div", // 标签,只写标签名,不写<>
        {
          // 属性
          ref: "test-render-ref",
          class: "test-render-class",
          // innerHTML: 'test-render-html' // 这里打开后子元素里边innerHTML内容不能展示
        },
        [
          // 子元素
          h(
            ElInput,
            {
              ...ElInput.$el,
              ...ElInput.$attrs,
              class: "test-render-class-child",
              placeholder: "请输入内容",
              style: {
                color: "FF0000",
              },
              modelValue: inputValue.value,
              "onUpdate:modelValue": ($event: any) => {
                // 实现了数据更新
                return (inputValue.value = $event.target.value);
              },
            },
          ),
          h("span", {
            class: "test-render-class-button",
            style: {
              color: "#FF0000",
              border: "1px solid #ccc",
              width: "60px",
              cursor: "pointer",
            },
            innerHTML: "提交",
            onClick: () => {
              emit('updateMsg', inputValue.value += 's-i')
            },
          }),
        ]
      );
    };
  },
});
</script>

四、欢迎交流指正,关注我一起学习。

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:08:57  更:2022-04-06 16:10:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:52:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码