Javascript AngularJS-复制时丢失值的对象
所以,我有一个巨大的对象(它是一个餐厅菜单),我只想保存我在上面更改的字段。我发现最好的方法是拥有一个“原始”并将其与对象的修改版本进行比较。 问题是,无论我用什么方式进行深度复制,都会使我丢失一些信息。 我试过了 及 它们都返回不同的数组(副本中缺少所有布尔变量和菜单的最后一块)。 然后,我尝试在php文件中创建两个变量,并独立使用它们,如下所示:Javascript AngularJS-复制时丢失值的对象,javascript,angularjs,json,object,deep-copy,Javascript,Angularjs,Json,Object,Deep Copy,所以,我有一个巨大的对象(它是一个餐厅菜单),我只想保存我在上面更改的字段。我发现最好的方法是拥有一个“原始”并将其与对象的修改版本进行比较。 问题是,无论我用什么方式进行深度复制,都会使我丢失一些信息。 我试过了 及 它们都返回不同的数组(副本中缺少所有布尔变量和菜单的最后一块)。 然后,我尝试在php文件中创建两个变量,并独立使用它们,如下所示: <script type="text/javascript"> menu = <?= ($menu) ? j
<script type="text/javascript">
menu = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
menuCopy = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
</script>
this.menuCopy = menu;
this.menu = menuCopy;
{"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}
但我得到了完全相同的问题:副本遗漏了相同的变量。奇怪的是,如果我像这样颠倒顺序:
<script type="text/javascript">
menu = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
menuCopy = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
</script>
this.menuCopy = menu;
this.menu = menuCopy;
{"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}
仍然是this.menuCopy
遗漏了变量
我没有看到什么?我在某个地方读到,JSON在复制时忽略布尔值,这是真的吗?你也这么做吗?如果是这样的话,我们如何才能做到这一点
编辑:
我删掉了菜单的一部分,但基本上,我得到了一个这样的菜单:
<script type="text/javascript">
menu = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
menuCopy = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
</script>
this.menuCopy = menu;
this.menu = menuCopy;
{"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}
另一个是这样的:
<script type="text/javascript">
menu = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
menuCopy = <?= ($menu) ? json_encode($menu) : 'false' ; ?>;
</script>
this.menuCopy = menu;
this.menu = menuCopy;
{"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>
原始菜单
{{MenuController.oldstaurant.menu}}
更改菜单
{{MenuController.restaurant.menu}}
餐厅=;
$restaurant
来自我的控制器(我使用的是Cakephp)。在没有看到您的代码的情况下,JSON中带有嵌套项的pluker似乎可以工作:angular.copy始终适用于任何大小的对象。“到底丢失了什么?”我编辑了这两个问题的答案。现在您可以看到代码和对象了。嗯,我不确定这是否是angularjs问题。您说您正在使用cakePHP,也许您的json_编码有问题?我不懂cakePHP,所以在那里帮不了什么忙