AngularJS未检测到大型对象叶节点更改
我正在尝试一个示例,其中我有一个大的JSON对象,我希望能够通过一个textarea(一种“高级设置”区域)编辑该对象的小子集的原始JSON源 当您编辑顶级元素$scope.objects时,JSON编辑器工作正常,并且遵循标准约定,允许指令更新其绑定模型, 但是,当我试图通过ng repeat为每个子对象输出一组编辑器时,对子对象的更改不会显示在完整的JSON对象输出中(或者在第二次ng repeat中显示子集的输出) 下面是我试图实现的一系列功能:您将在上面的示例中看到,因为我正在编辑JSON数据的小子集,左侧的更改不适用于右侧。向下滚动到底部示例,它可以工作,但这只是因为我在左侧编辑整个对象,在右侧输出整个对象 我可以做些什么来通知“链上”一个较大对象中的叶节点已更新?以下是相关代码的子集: 包含对象的控制器:AngularJS未检测到大型对象叶节点更改,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我正在尝试一个示例,其中我有一个大的JSON对象,我希望能够通过一个textarea(一种“高级设置”区域)编辑该对象的小子集的原始JSON源 当您编辑顶级元素$scope.objects时,JSON编辑器工作正常,并且遵循标准约定,允许指令更新其绑定模型, 但是,当我试图通过ng repeat为每个子对象输出一组编辑器时,对子对象的更改不会显示在完整的JSON对象输出中(或者在第二次ng repeat中显示子集的输出) 下面是我试图实现的一系列功能:您将在上面的示例中看到,因为我正在编辑JSO
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);