所以,我有这个巨大的对象(它是一个餐馆菜单),我想只保存我更改的字段。我发现做到这一点的最好方法是拥有一个"原创"并将其与对象的修改版本进行比较。 问题是,无论我使用什么方式进行深层复制,都会让我失去一些信息。 我试过了
this.menu = menu;
this.oldMenu = JSON.parse(JSON.stringify(this.menu));
和
this.menu = menu;
this.oldMenu = angular.copy(this.menu);
并且它们都返回不同的数组(副本中缺少所有布尔变量和菜单的最后一个块)。 然后,我尝试在php文件中创建两个变量,并单独使用它们,如下所示:
<script type="text/javascript">
menu = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
menuCopy = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
</script>
然后
this.menu = menu;
this.menuCopy = menuCopy;
但我得到完全相同的问题:副本错过了相同的变量。关于它的奇怪之处在于,如果我颠倒这样的顺序:
this.menuCopy = menu;
this.menu = menuCopy;
它仍然是this.menuCopy
,错过了变量。
我没有看到什么?我在某处读到JSON在复制时忽略了布尔值,这是真的吗? Angular会做同样的事情吗?如果是这样的话,怎么做这个重复?
编辑: 我编辑了一个菜单,但基本上,我得到其中一个:
{"id":2442,"categories":[{"id":13364,"itens":[{"id":136056},
{"id":136057,"daily_promo":null}],
"daily_promo":null}],"daily_promo":null}
和另一个像这样:
{"id":2442,"categories":[{"id":13364,"itens":[{"id":136056,"update_price":false},
{"id":136057,"daily_promo":null,"update_price":false}],
"daily_promo":null,"itens_length":[{"id":136056,"name":"teste 1","category_id":13364,"daily_promo":null,"update_price":false},{"id":136057,"name":"teste 2","category_id":13364,"daily_promo":null,"update_price":false}]}],"daily_promo":null}
代码没有更多内容,它非常像:
angular.module('menu', [])
.controller('MenuController', ['$rootScope', '$scope', '$http', function($rootScope, $scope, $http){
this.restaurant = (restaurant) ? restaurant : false ;
this.oldRestaurant = angular.copy(this.restaurant);
}
然后是HTML:
<div ng-controller = "CulinaryController as CulinaryController">
ORIGINAL MENU <br/>
{{MenuController.oldRestaurant.menu}}
<br/><br/><br/>
CHANGED MENU <br/>
{{MenuController.restaurant.menu}}
</div>
<script type="text/javascript">
restaurant = <?= ($restaurant) ? json_encode($restaurant) : 'false' ; ?>;
</script>
$restaurant
来自我的控制器(我正在使用Cakephp)。