Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
Angularjs 使用递归显示保存ng模型_Angularjs - Fatal编程技术网

Angularjs 使用递归显示保存ng模型

Angularjs 使用递归显示保存ng模型,angularjs,Angularjs,设置 我有一个显示JSON的前端。可以通过带有保存按钮的ng模型文本区域编辑JSON中的值 它通过递归调用如下对象来实现: 在tree-object-edit.html中: ... <h4 class="capitalize">{{ item_key }}: </h4> <textarea rows="2" cols="60" ng-model="item"></textarea> <div ng-if="item.properties"&

设置

我有一个显示JSON的前端。可以通过带有保存按钮的ng模型文本区域编辑JSON中的值

它通过递归调用如下对象来实现:

在tree-object-edit.html中:

...
<h4 class="capitalize">{{ item_key }}:  </h4>
<textarea rows="2" cols="60" ng-model="item"></textarea>
<div ng-if="item.properties">
    <ul>
        <li ng-repeat="(item_key, item) in item.properties" ng-include="'html/tree-object.html'"></li>
    </ul>
</div>
问题

单击“保存”不会保存MyDefinition,因为myDefiniton尚未更改。只有一个项目已更改

问题:

当myDefiniton中的项目发生更改时,是否有方法使其更改

更新1

我发现:

<textarea rows="2" cols="60" ng-model="myDefinition[item_key]"></textarea> 
是否适用于递归的第一级

您正确地注意到,ng model=myDefinition[item_key]parent[key]在我的示例中是有效的,-更改将反映到所需的模型中,如果您在属性级别而不是直接值上进行更改。所以,除了向嵌套模板传递值和键之外,还应该传递父对象,这样就可以创建从实际值到头部的引用链:

角度.模块'app',[].控制器'ctrl',['$scope',函数$scope{ $scope.value={ 身份:{ 名称:“Max”, 姓:"史密斯",, }, 生日:{ 年份:1990年, 月份:2, 日期:{ 工作日:“星期五”, 编号:“13” } }, 第一级:“abc” } $scope.isObject=functionvalue{ 返回角度值; } }] {{key}} {{value}json}
只是为了添加一个可能更优雅的解决方案:注意,如果您更新角度递归指令也会成为一件事

angular.module'app',['dotjem.angular.tree']。controller'ctrl',['$scope',function$scope{ $scope.value={ 身份:{ 名称:“Max”, 姓:"史密斯",, }, 生日:{ 年份:1990年, 月份:2, 日期:{ 工作日:“星期五”, 编号:“13” } }, 第一级:“abc” } $scope.isObject=functionvalue{ 返回角度值; } }] {{key}}
    $scope.create = function () {
        MyDefinition.save($scope.myDefinition,
            function () {
            });
    };
<textarea rows="2" cols="60" ng-model="myDefinition[item_key]"></textarea>