Angular 从@Input Variable分配的变量也会更改分配的变量

Angular 从@Input Variable分配的变量也会更改分配的变量,angular,input,Angular,Input,在Angular6中,我使用@Input()从父级向客户端获取一个变量值 并使用[ngModel]和(ngModelChange)函数绑定到字段 在子组件中,当用户更改此变量值(绑定)时,我需要对新值和旧值进行比较验证。如何做到这一点 我尝试将orderdata分配给一个新变量 oldorderdata = orderdata; 然后再进行比较。但是,当用户更改orderdata时,oldorderdata本身也会更改。通常,在JS中,当您将对象分配给彼此时,您并不是分配它们的值,而是分配给

在Angular6中,我使用@Input()从父级向客户端获取一个变量值

并使用[ngModel]和(ngModelChange)函数绑定到字段

在子组件中,当用户更改此变量值(绑定)时,我需要对新值和旧值进行比较验证。如何做到这一点

我尝试将orderdata分配给一个新变量

oldorderdata = orderdata; 

然后再进行比较。但是,当用户更改orderdata时,oldorderdata本身也会更改。

通常,在JS中,当您将对象分配给彼此时,您并不是分配它们的值,而是分配给它们的内存引用

这就是为什么更改
orderdata
时,
oldorderdata
也会更改,因为它指向内存中的同一对象

为了防止出现这种情况,可以在ES6中使用扩展运算符(
),如下所示:

oldorderdata = {...orderdata};

这将把orderdata中的所有属性分散到oldorderdata对象中。

通常,当您在JS中为每个对象赋值时,您并不是在赋值,而是在赋值给它们的内存引用

这就是为什么更改
orderdata
时,
oldorderdata
也会更改,因为它指向内存中的同一对象

为了防止出现这种情况,可以在ES6中使用扩展运算符(
),如下所示:

oldorderdata = {...orderdata};

这会将orderdata中的所有属性分散到oldorderdata对象中。

变量通常会更改,因为您将其与[(ngModel)]绑定,要进行比较,您需要将变量绑定到比较函数的输出,而不是将其绑定到[(ngModel)],要进行比较,您需要将变量绑定到比较函数的输出,而不是

是否检查,尤其是
OnChanges
?是否检查,尤其是
OnChanges
?在orderdata变量上绑定模型,而在oldorderdata上没有绑定。orderdata中的更改是如何更改oldorderdata的?在orderdata变量上使用Model绑定,而在oldorderdata上没有绑定。orderdata中的更改是如何更改旧orderdata的?谢谢Siddharth。上面的解决方案加上将oldorderdata声明为私有(如讨论中所建议的)解决了这个问题很高兴我提供了帮助!!谢谢西德哈特。上面的解决方案加上将oldorderdata声明为私有(如讨论中所建议的)解决了这个问题很高兴我提供了帮助!!