Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-复制时丢失值的对象_Javascript_Angularjs_Json_Object_Deep Copy - Fatal编程技术网

Javascript AngularJS-复制时丢失值的对象

Javascript AngularJS-复制时丢失值的对象,javascript,angularjs,json,object,deep-copy,Javascript,Angularjs,Json,Object,Deep Copy,所以,我有一个巨大的对象(它是一个餐厅菜单),我只想保存我在上面更改的字段。我发现最好的方法是拥有一个“原始”并将其与对象的修改版本进行比较。 问题是,无论我用什么方式进行深度复制,都会使我丢失一些信息。 我试过了 及 它们都返回不同的数组(副本中缺少所有布尔变量和菜单的最后一块)。 然后,我尝试在php文件中创建两个变量,并独立使用它们,如下所示: <script type="text/javascript"> menu = <?= ($menu) ? j

所以,我有一个巨大的对象(它是一个餐厅菜单),我只想保存我在上面更改的字段。我发现最好的方法是拥有一个“原始”并将其与对象的修改版本进行比较。 问题是,无论我用什么方式进行深度复制,都会使我丢失一些信息。 我试过了

它们都返回不同的数组(副本中缺少所有布尔变量和菜单的最后一块)。 然后,我尝试在php文件中创建两个变量,并独立使用它们,如下所示:

<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,所以在那里帮不了什么忙