vue实现点击修改文字

场景

点击文字,实现用户可输入修改该文字并且鼠标点击其他元素触发保存事件

技术:
vue2.x,
UI框架使用的是ant design 1.7.8

实现效果:

点击前:vue实现点击修改文字_第1张图片点击后:
vue实现点击修改文字_第2张图片
点击输入框外部元素实现保存:
vue实现点击修改文字_第3张图片

template代码块

    
"queryDatatitle" :title="queryData.name" @click="updateNmae(queryData.name)">
"!isUpdateName">{{ queryData.name }}
"loading" v-show="inputDisabled" /> "queryDataName" v-model="queryData.name" :disabled="inputDisabled" placeholder="请输入自定义页面名称" class="updateInput" allowClear @pressEnter="namePressEnter" @blur="namePressEnter" @change="changeQueryDataName" >

script代码块

data() {
    return {
      //数据
   	  queryData:{
		name:'',
		id:''
	  },
	  //显示隐藏input
      isUpdateName: false,
      //禁用input
      inputDisabled: false,
      //解决点击input清空按钮blur比click事件优先的标识
      clickFlag: false,
    }
},
methods: {
    //判断是否清空数据
    changeQueryDataName(row) {
      if (row.type == 'click') {
        //触发清除
        this.clickFlag = true
      }
    },
    //修改名称
    namePressEnter() {
      setTimeout(() => {
        if (this.clickFlag) {
          this.clickFlag = false
          return
        }
        if (this.queryData.name === '' || this.queryData.name.length >= 50) {
          this.$message.warning('名称最大限制为50个字符且不允许为空!')
          this.$nextTick(() => {
            this.$refs.queryDataName.focus()
          })
          return
        }
        this.inputDisabled = true
        //setEditForm是我这边后端定义的接口
        setEditForm({ id: this.queryData.id, name: this.queryData.name })
          .then((res) => {
            this.inputDisabled = false
            this.$message.success('页面名称修改成功')
            this.isUpdateName = false
            this.$emit('updateName')
          })
          .catch((err) => {
            this.inputDisabled = false
            this.$message.error(err.message)
          })
      }, 200)
    },
    //重命名触发
    updateNmae() {
      this.isUpdateName = true
      this.$nextTick(() => {
        this.$refs.queryDataName.focus()
      })
    }
}

style代码块

  .queryDatatitle {
    cursor: pointer;
    color: var(--titleCustomColor);
    font-weight: bold;
    font-size: 17px;
    align-items: center;
    display: flex;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    .updateInput {
      width: 350px;
    }
  }

注意点:

1.失去焦点并鼠标点击外部 dom 元素一次触发事件@blur=“blur”

2.input 定义 ref 为 queryDataName,然后通过如下获取焦点,必须要加$nextTick,不然会报错获取不到dom元素

 this.$nextTick(() => {
          this.$refs.queryDataName.focus()
    })

3.点击input输入框的清空按钮会触发input的blur的事件
可以通过onChange事件触发的方法,根据type来判断出是输入还是点击清除

   changeQueryDataName(row) {
      if (row.type == 'click') {
        console.log('触发清除')
      }
    },

4.ant design的官网地址

你可能感兴趣的:(vue,vue.js,javascript,前端)