解决前端table组件绑定的data改变时,数据不会从新渲染的问题

今天项目经理给我提了一个需求,希望表格能够根据表格的某个字段动态排序表格,例如下图:

 

 听到需求时感觉也挺简单,给字段的输入框加上chang事件,用排序算法在字段值改变时把表格重新排序,在赋值就好了。

this.replace=this.editTable;
for(let i=0;i<this.replace.length-1;i++){
    for(let j=0;j<this.replace.length-1-i;j++){
        let temp;
        if(this.replace[j].seqNo>this.replace[j+1].seqNo){
           temp=this.replace[j];
           this.replace[j]=this.replace[j+1];
           this.replace[j+1]=temp;
         }
    }
}
this.editTable=this.replace;

 运行后发现并无效果

把editTable的值打印到控制台发现其实table已经排序好了(图中为了直观只打印了排序的字段)

 于是意识到了可能是页面没有重新渲染,于是到网上找寻了解决方法,终于让我找到了

 https://www.imooc.com/wenda/detail/522301

 大佬说:因为数组直接赋值不能被 Object.defineProperty 检测到,于是我把

this.editTable=this.replace改为this.$set(this.editTable,this.replace)

终于实现了需求!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果想要数据改变后重渲染table,你可以使用JavaScript来实现。 一种方法是在数据改变后手动更table的内容,例如: ``` var table = document.getElementById("myTable"); table.innerHTML = ""; // 清空table内容 for (var i = 0; i < newData.length; i++) { var row = table.insertRow(-1); for (var j = 0; j < newData[i].length; j++) { var cell = row.insertCell(-1); cell.innerHTML = newData[i][j]; } } ``` 另一种方法是使用一些框架或库,如React,Vue,Angular等,它们可以自动管理界面的渲染,并在数据改变渲染table。 例如,使用React,你可以这样写: ``` class Table extends React.Component { render() { return ( <table> <tbody> {this.props.data.map((row, i) => ( <tr key={i}> {row.map((cell, j) => ( <td key={j}>{cell}</td> ))} </tr> ))} </tbody> </table> ); } } ``` 然后,你可以在需要重渲染table,更组件的props: ``` ReactDOM.render(<Table data={newData} />, document.getElementById("root")); ``` ### 回答2: 当数据发生改变,需要重渲染table,主要有以下几个步骤: 1. 获取最数据:首先,需要获取最数据,可以通过后台接口或者其他数据源来获取。例如,可以通过发送AJAX请求获取最数据。 2. 清空旧的table内容:在重渲染table之前,需要先清空旧的table内容,以便后续重填充数据。可以通过JavaScript操作,找到table元素,并将其内容清空。 3. 构建table结构:接下来,需要根据最数据构建table结构。可以通过JavaScript动态创建table、tr和td等元素,并将最数据绑定到对应的位置。 4. 填充数据:将最数据逐行逐列填充到创建的table。可以使用循环遍历数据,并使用JavaScript的appendChild方法将对应的数据添加到创建的tr。 5. 将table渲染到页面:将创建的table渲染到页面,使用户可以看到最数据。可以通过将创建的table元素插入到页面指定的位置,或者更已有的table元素。 通过以上步骤,当数据发生改变,可以重渲染table,使得用户可以及地看到最数据。在实际开发,可以根据具体的需求和技术栈选择适合的方法和工具来实现数据的重渲染。 ### 回答3: 当数据发生改变,重渲染table是一个常见的需求。通常情况下,我们可以通过以下步骤来实现这个功能。 首先,我们需要将数据table进行绑定。这可以通过将数据存储在一个数组或者对象来实现。然后,我们可以使用循环语句(如for循环或者forEach函数)遍历数据,并在每次循环使用innerHTML或者createElement等方法来动态创建table的行和列。 接下来,当数据发生改变,我们需要更table以显示最数据。这可以通过在数据变化的地方,即数据发生改变的函数或者事件处理函数,调用重渲染table的函数来实现。这个函数会先清空table的内容,然后重根据最数据,调用相同的循环语句来创建或更table的行和列。 在每次重渲染table,我们还可以根据数据的类型和需求,添加一些样式、条件判断或者其他操作。这可以通过在创建或更table的行和列,给元素添加class属性、设置样式等来实现。 最后,通过这种方式,当数据发生改变table会自动重渲染,以显示最数据。这样,我们就可以方便地更table,使其与数据保持同步。 需要注意的是,当数据量较大,频繁地重渲染table可能会降低性能。在这种情况下,可以考虑使用虚拟渲染等技术,以提高渲染效率。同,我们也可以通过分页、滚动加载等方式,减少一次性渲染大量数据的压力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值