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

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控制台上尝试以下代码。似乎有效。

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

10-08 06:33