我正在尝试检查模型的值是否已更改,以便可以警告用户他/她尚未保存更改。
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\}/, "{}");