vue.js实现了一个页面:有个table,顶上有“编辑、添加”按钮,怎么实现二者共用窗体,在来回切中不出bug

anj3 2019-06-02 07:54:35
使用vue.js开发中遇到这样问题:table的行“编辑”和“添加”是一个窗口。因为选中行的rowObject对象有双向绑定机制在里面干扰,造成了我欲选中一行进行编辑,但是我又关闭窗口点了添加,此时添加窗口也有内容。这个怎么规避啊。
...全文
628 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱吃排骨 2019-10-21
  • 打赏
  • 举报
回复
大佬牛B啊啊啊
anj3 2019-06-03
  • 打赏
  • 举报
回复
置空方法可改更简单版:

  //表单的每项置空
  public Reset() {
    for (let key in this.currentRow) {
      this.currentRow[key]='';      
    } 
  }
ღ简单 2019-06-03
  • 打赏
  • 举报
回复
给个小建议,只需要在点击事件里头,先加个清除,每次点击都会清除掉之前的。
anj3 2019-06-03
  • 打赏
  • 举报
回复
问题解决了 ,方便其他网友参考。思路是通过中间变量。贴出代码Typescript代码如下:

currentRow: any = null;//行对象(从页面传来)
rowTemp: any = null;//行对象(中间变量,用于在编辑和添加来回反复切时)
currentRow: string='';//下拉框 默认值

public EditOrAddWindow(currentRow: any, wTitle: string, cName: string, conNameList: any) {
	this.winTitle = wTitle;//窗体标题
	this.conName = cName;//下拉默认值
	this.currentRow = currentRow;
	this.conNames = conNameList;//下拉 list
	if (wTitle == '添加') {
	  if (this.currentRow.Id != ""){ //currentRow有数据时才赋给rowTemp
		this.rowTemp = JSON.parse(JSON.stringify(this.currentRow));
	  }
	  this.Reset();
	} else if (wTitle == '编辑' && this.currentRow.Id == "") {//编辑窗体 且 currentRow无内容时
		this.currentRow = JSON.parse(JSON.stringify(this.rowTemp));
	}
}


//表单的每项置空
public Reset() {
	this.currentRow.Id="";//表PK 用它来判断currentRow是否为空
	this.currentRow.DictName = "";
	this.currentRow.DictAge = "";
	this.currentRow.Title = "";
}
讨厌走开啦 2019-06-03
  • 打赏
  • 举报
回复
使用v-for遍历的时候指定key,否则vue会复用元素(在你这里表现的就是切换了以后元素内的信息被保留了)。
anj3 2019-06-02
  • 打赏
  • 举报
回复
选择一行后,你不断地来回切就会发现有bug
河南棒小伙 2019-06-02
  • 打赏
  • 举报
回复
很好解决啊,我假设你的table是父组件,弹窗是子组件,然后子组件的展示内容是父组件通过prop属性传进去的,那么,你点编辑和点添加肯定不是同一个事件的,在不同的事件里,让弹窗弹出之前改变要传递的prop属性的值就好了,要添加时,就把之前要传递的属性数据清空不就行了?编辑时,传递的table的rowObject,这有什么矛盾呢?

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧