Vue参数的增删改实例详解

展示参数明细

Vue参数的增删改实例详解_第1张图片

elementui Tag标签

Vue参数的增删改实例详解_第2张图片


              
// 获取分类参数的数据
    async getParamsData() {
      // 判断是否选中三级分类,如果未选中则重新选中
      if (this.selectdKeys.length !== 3) {
        this.selectdKeys = []
        this.paramsData = []
        return
      }
      // 根据所选分类获取动态参数或者静态属性                    三级分类的id
      const { data: res } = await this.$http.get(`categories/${this.cateId}/attributes`, {
        params: {
          sel: this.activeName,
        },
      })
      if (res.meta.status !== 200) {
        return this.$message.error('获取参数列表失败')
      }
        //对参数的明细进行处理:按空格拆分为数组
        res.data.forEach(item=>{
            item.attr_vals = item.attr_vals ? item.attr_vals.split(',') : []
        })
        console.log(res.data)
      this.paramsData = res.data
    },

Vue参数的增删改实例详解_第3张图片

展示参数明细功能

inputVisible 控制输入框的显示

showInput

 // tag 标签 显示文本输入框
      inputVisible:false,
                
                
                
                + New Tag
// tag 显示文本输入框
    showInput(){
        this.inputVisible=true
    }

Vue参数的增删改实例详解_第4张图片

Vue参数的增删改实例详解_第5张图片

输入框太宽,修改下长度

.input-new-tag{
    width: 120px;
}

但是现在会存在一个问题,颜色和尺寸属性应该是独立的互不产生影响才对,但是这里产生了关联(点击按钮颜色和尺寸都会出现输入框,如果输入内存也都会同时输入)

Vue参数的增删改实例详解_第6张图片

直接在data里面定义下面的属性是不行的

// tag 标签 显示文本输入框

inputVisible:false,

解决方法:可以在后端返回的参数数据里面加上该属性,用以控制文本框的显示和隐藏

//对参数的明细进行处理:按空格拆分为数组
        res.data.forEach(item=>{
            item.attr_vals = item.attr_vals ? item.attr_vals.split(',') : []
            item.inputVisible=false //控制文本框的显示和隐藏
        })

这里的v-if 相当于从该行数据中获取该值用以控制

 

这是文本框输入的值

v-model="scope.row.inputValue" 
//对参数的明细进行处理:按空格拆分为数组
        res.data.forEach(item=>{
            item.attr_vals = item.attr_vals ? item.attr_vals.split(',') : []
            item.inputVisible=false //控制文本框的显示和隐藏
            item.inputValue=''  // 文本框输入的值
        })

这两步的目的就是让添加参数的按钮输入框互不产生影响

showInput(scope.row) 这里需要拿到参数对象

+ New Tag

Vue参数的增删改实例详解_第7张图片

所以获取到用户输入的参数后先添加到参数明细attr_vals中

row.attr_vals.push(row.inputValue.trim())
   // tag 显示文本输入框
    showInput(row){
        row.inputVisible=true
        this.$nextTick(_ => {
            // 点击新增按钮后  输入框获取焦点 ref = saveTagInput
          this.$refs.saveTagInput.$refs.input.focus();
        });
    },
    // 文本框失去焦点或按下enter 按键
    handleInputConfirm(row){
        if(row.inputValue.trim()){
            row.attr_vals.push(row.inputValue.trim())
            // 更新参数的明细
            this.updateParamsDetail(row)
        }
        row.inputVisible=false
    },
    // 更新参数的明细
    async updateParamsDetail(row){
        const {data:res} = await this.$http.put(`categories/${this.cateId}/attributes/${row.attr_id}`,{
            attr_name:row.attr_name,
            attr_sel:row.attr_sel,
            attr_vals:row.attr_vals.join(',')
        })
        if(res.meta.status !== 200){
            return this.$message.error('更新参数明细失败')
        }
        this.$message.success('更新参数明细成功!')
    }

这里失去焦点和执行enter会触发两次事件,执行两次

 row.inputValue=''
// 文本框失去焦点或按下enter 按键
    handleInputConfirm(row){
        if(row.inputValue.trim()){
            row.attr_vals.push(row.inputValue.trim())
            // 更新参数的明细
            this.updateParamsDetail(row)
        }
        row.inputVisible=false
        // 执行完一次(enter 或者失去焦点) 清空,这样就不会执行上面的if
        row.inputValue=''
    },

实现删除参数明细功能

splice 方法

// 监视tag标签的关闭事件,即删除对应的参数明细项
    handleClose(){
        row.attr_vals.splice(i,1)
        // 更新参数的明细
        this.updateParamsDetail(row)
    },

实现静态属性的更新


              
            

只需要把动态属性的明细 复制到静态属性即可

完整代码






总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

你可能感兴趣的:(Vue参数的增删改实例详解)