首页 > 解决方案 > 替换不是替换文本

问题描述

我正在尝试检查模型的值是否已更改,以便我可以警告用户他/她有未保存的更改。

modelHasChanged(): boolean {
 let search1 = ",\"_$visited\":true";
 let search2 = "\"_$visited\":true";

 let strModel = JSON.stringify(this.model);
 strModel = strModel.replace(/search1/g, "");
 strModel = strModel.replace(/search2/g, "");

 let o = JSON.stringify(new MyNewObject());
 let diff = strModel !== o;
 return diff;
}

不幸的是,它总是正确的。当我将鼠标悬停在 上时strModel,我注意到即使我什么都不做,,"_$visited":true仍然会为某些属性添加。例如:

o = "{"proprty1": null, "property2": {} }"
strModel = "{"proprty1": null, "property2": {"_$visited":true} }"

因此,如果我可以删除那些添加的文本,那么比较将起作用。Replace不管用。我仍然得到原文。

strModel = strModel.replace(/search1/g, "");
strModel = strModel.replace(/search2/g, "");

感谢您的帮助

标签: javascript

解决方案


您可能需要转义 {、}、_ 等字符。

在 javascript 控制台上尝试以下代码。似乎工作。

let temp = "{\"property1\": null. \"property2\": {} }"
let strModel = "{\"property1\": null, \"property2\": {\"_$visited\":true} }"
strModel = strModel.replace(/\{\"\_\$visited\":true\}/, "{}");

推荐阅读