AngularJS未检测到大型对象叶节点更改

AngularJS未检测到大型对象叶节点更改,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我正在尝试一个示例,其中我有一个大的JSON对象,我希望能够通过一个textarea(一种“高级设置”区域)编辑该对象的小子集的原始JSON源 当您编辑顶级元素$scope.objects时,JSON编辑器工作正常,并且遵循标准约定,允许指令更新其绑定模型, 但是,当我试图通过ng repeat为每个子对象输出一组编辑器时,对子对象的更改不会显示在完整的JSON对象输出中(或者在第二次ng repeat中显示子集的输出) 下面是我试图实现的一系列功能:您将在上面的示例中看到,因为我正在编辑JSO

我正在尝试一个示例,其中我有一个大的JSON对象,我希望能够通过一个textarea(一种“高级设置”区域)编辑该对象的小子集的原始JSON源

当您编辑顶级元素$scope.objects时,JSON编辑器工作正常,并且遵循标准约定,允许指令更新其绑定模型, 但是,当我试图通过ng repeat为每个子对象输出一组编辑器时,对子对象的更改不会显示在完整的JSON对象输出中(或者在第二次ng repeat中显示子集的输出)

下面是我试图实现的一系列功能:您将在上面的示例中看到,因为我正在编辑JSON数据的小子集,左侧的更改不适用于右侧。向下滚动到底部示例,它可以工作,但这只是因为我在左侧编辑整个对象,在右侧输出整个对象

我可以做些什么来通知“链上”一个较大对象中的叶节点已更新?以下是相关代码的子集:

包含对象的控制器:

app.controller('Ctrl', ['$scope', function($scope) {
    $scope.model = {};
    $scope.model.objects = [
  {
    "param1": "value1",
    "param2": "value2",
    "param3": "value3",
      "param4": {
          "subParam5": true,
          "subParam6" : false
      }
  },
  {
    "param1": "value1",
    "param2": "value2",
    "param3": "value3",
      "param4": {
          "subParam5": true,
          "subParam6" : false
      }
  },
  {
    "param1": "value1",
    "param2": "value2",
    "param3": "value3",
      "param4": {
          "subParam5": true,
          "subParam6" : false
      }
  },
  {
    "param1": "value1",
    "param2": "value2",
    "param3": "value3",
      "param4": {
          "subParam5": true,
          "subParam6" : false
      }
  }
];
}]);
角度视图:

<div ng-app="app" class="container">
        <div ng-controller="Ctrl" class="row">
            <!-- individual object editors -->
            <div ng-repeat="object in model.objects" class="well">
                <textarea json-editor ng-model='object' style="width: 100%;" rows="10"></textarea>
            </div>

            <!-- individual object JSON output. Edits to the objects above don't show here. -->
            <div ng-repeat="object in model.objects">
            <pre>{{ object | json }}</pre>
            </div>
        </div>
    </div>

你需要有一个健康的身体。在模型中,否则模型值将按值而不是参照复制到新范围中。这是你的便当,更新了


您是否尝试使用$watchCollection

试试这个:

    scope.$watch('objects',function(newValues,oldValues){/***/},true);
如果你的阵法只有一层深,这将起作用。如果开始使用嵌套数组,可以尝试以下操作:


注意,第三个参数设置为true,用于深入观察对象。

请查看相关文档,尤其是中的第2和第3段。顺便说一下,它是一个“大”JSON对象并不重要。
            <div ng-repeat="object in model.objects" class="well">
                <textarea json-editor ng-model='object.json' style="width: 100%;" rows="10"></textarea>
    scope.$watchCollection('objects',function(newValues, oldValues){

        // do whatever you want to do when an element changes
    });
    scope.$watch('objects',function(newValues,oldValues){/***/},true);