vue+iview 使用v-html属性显示html代码并调用方法

项目架构

vue +iview

使用window对象的原因

需要自己拼接HTML代码 即使用 v-html 属性
在自己拼装的html代码中添加方法
使用的是 οnclick="changeSelBtn(’ + a + ',2)"
这个方法不能直接调用到vue中的 methods 中的方法
暂时定义了window对象方法使用
在使用后,会导致window对象中方法/变量在不断增加,可能在其他页面使用到相同的方法/变量导致数据或函数错误
想到的解决方法1
在vue周期中,销毁页面之前或者销毁之后删除或将方法/变量赋空
想到的方法2
没有想到

下附代码

场景1

一个拼接好的HTML里边含有多个方法

这是定义方法/变量
    tableDisplay(data) {
      let vm = this
      let html = ' <table border="1" width="100%"  style="margin-top: 15px;text-align: center;background-color: #fff;" >\n' +
        '      <thead>\n' +
        '      <tr style="background-color: #b7fbf1;">\n' +
        '        <td class="tabletou" width="20%">名称</td>\n' +
        '        <td class="tabletou" width="20%">id</td>\n' +
        '        <td class="tabletou" width="20%">时间</td>\n' +
        '        <td class="tabletou" width="20%">状态</td>\n' +
        '        <td class="tabletou" width="20%">操作</td>\n' +
        '      </tr>\n' +
        '      </thead><tbody>'
      // 循环tr
      data.forEach(item1 => {
        html += ' <tr><td width="20%" ' + 'rowspan="' + item1.instance.length + '">' + item1.name + '</td>'
        item1.instance.forEach(item => {
          let a = vm.htmlEncodeByRegExp(JSON.stringify(item))
          html += '<td width="20%">' + item.instanceId + '</td>'
          html += '<td width="20%">' + vm.fmtDate(Number(item.lastUpdatedTimestamp)) + '</td>'
          html += '<td width="20%">' + item.status + '</td> '
          html += '<td width="20%">' +
            '<button class="buttons" ' + (item.status === 'UP' ? 'style=" background-color: #f90; border-color: #f90;"' : 'style=" background-color: #ccc; border-color: #f90;"') + ' onclick="changeSelBtn(' + a + ',0)" >' + (item.status === 'UP' ? '暂停' : '恢复') + '</button>' +
            '<button class="buttons" style=" background-color: #ed4014; border-color: #ed4014;" onclick="changeSelBtn(' + a + ',2)" >移除</button>' +
            '<button class="buttons" style=" background-color: #14ed67; border-color: #14ed67;" onclick="changeSelBtn(' + a + ',3)" >查询</button>' +
            '</td></tr>'
        })
      })
      html += '</tbody></table>'
      document.getElementById('tableShow').innerHTML = html
      window.changeSelBtn = function(data, type) {
        vm.changeSelBtn2(data, type)
      }
    },
这是赋空方法/变量
//  销毁前
  beforeDestroy () {
    delete  window.changeSelBtn
  },
 //  销毁后
  destroyed(){
    delete  window.changeSelBtn
  }

不使用window对象,使用h5中的标签属性

拼接好的html中只有一个方法时
上代码

html部分
<div  @click="hopRouting($event)"  v-html="messageContent"></div>
方法区
根据获取到的dom对象获取对应的值
      hopRouting(e) {
        let vm = this
        let target = e.target
        判断是否是自己需要的标签  a 标签  ,data-type 类型为 workorder  获取到的内容为  data-id中的
        if (target.nodeName.toLowerCase() === 'a' && target.getAttribute('data-type') === 'workorder' ) {
        // 进行自己的逻辑处理  我这是跳转路由
          vm.$router.push({
            name: '我的路由名字',
            params: {
              workorderId: target.getAttribute('data-id')
            }
          })
        }
      },
v-html代码

messageContent

前缀:<a href="javascript:void(0)" data-type="workorder" data-id="目标id">显示内容</a>, 后缀

如果有更好的方法请联系,谢谢浏览

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤实现vue+iview外部按钮删除Table表格通过复选框选中的某一行数据: 1. 在table组件中添加selection-change事件处理函数,用于监听选中数据的变化。 ```html <template> <Table :data="tableData" @selection-change="handleSelectionChange"> <TableColumn type="selection" :selectable="selectable"></TableColumn> <TableColumn label="姓名" prop="name"></TableColumn> <TableColumn label="年龄" prop="age"></TableColumn> <TableColumn label="性别" prop="gender"></TableColumn> </Table> <Button type="primary" @click="handleDelete">删除选中项</Button> </template> ``` 2. 在methods中定义handleSelectionChange方法,用于保存当前选中的数据。 ```javascript methods: { handleSelectionChange(selectedItems) { this.selectedItems = selectedItems; }, handleDelete() { // 删除选中的数据 this.selectedItems.forEach(item => { const index = this.tableData.indexOf(item); this.tableData.splice(index, 1); }); // 取消选中状态 this.$refs.table.clearSelection(); } } ``` 3. 在handleDelete方法中实现删除选中的数据,并调用$refs.table.clearSelection()方法取消选中状态。 完整代码如下: ```html <template> <Table :data="tableData" @selection-change="handleSelectionChange" ref="table"> <TableColumn type="selection" :selectable="selectable"></TableColumn> <TableColumn label="姓名" prop="name"></TableColumn> <TableColumn label="年龄" prop="age"></TableColumn> <TableColumn label="性别" prop="gender"></TableColumn> </Table> <Button type="primary" @click="handleDelete">删除选中项</Button> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, gender: '男' }, { name: '李四', age: 20, gender: '女' }, { name: '王五', age: 22, gender: '男' } ], selectedItems: [] }; }, methods: { handleSelectionChange(selectedItems) { this.selectedItems = selectedItems; }, handleDelete() { // 删除选中的数据 this.selectedItems.forEach(item => { const index = this.tableData.indexOf(item); this.tableData.splice(index, 1); }); // 取消选中状态 this.$refs.table.clearSelection(); } } }; </script> ``` 其中,需要注意的是在TableColumn中添加了type="selection"属性,用于实现复选框选择功能。同时,还需要定义selectable方法,用于控制某些行是否可选。 ```javascript selectable(row, index) { // 第一行不可选 return index !== 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值