Angularjs 重新启动-嵌套资源

Angularjs 重新启动-嵌套资源,angularjs,rest,restangular,Angularjs,Rest,Restangular,使用restanglar处理嵌套资源时,最佳做法是什么? i、 e })) 这将允许我很好地访问视图中的每个视图 <li ng-repeat="proof in project.proofs">Total: {{proof.comments.length}}</li> 这让我觉得我一定是实施了错误的东西,有没有更好的方法来处理它 除了用这样的东西(未测试)直接定义每个$scope之外? i、 e })) 建议的最佳做法是什么?有两个选项:编写自定义PUT方法或从对象中删

使用restanglar处理嵌套资源时,最佳做法是什么? i、 e

}))

这将允许我很好地访问视图中的每个视图

<li ng-repeat="proof in project.proofs">Total: {{proof.comments.length}}</li>
这让我觉得我一定是实施了错误的东西,有没有更好的方法来处理它

除了用这样的东西(未测试)直接定义每个$scope之外? i、 e

}))


建议的最佳做法是什么?

有两个选项:编写自定义PUT方法或从对象中删除属性

选项#1:编写自定义看跌期权方法 放置元素的默认方法将提交所有设置的参数

您可以在Restangular源代码中看到这一点,其中每个资源都使用一组默认的方法进行初始化,这些方法接受所有参数,并且不进行任何筛选以删除参数

您可以创建一个自定义方法,从对象中剥离“proof”属性,或者只选择某些字段放入请求中

选项2:从对象中删除属性。 在
put()
项目之前,可以执行以下操作:

/* ... code to get the project object and the nested proof objects ... */

project.name = 'New Name!';

delete project.proofs;
project.put();
// get project...

update = function(field, value){
  project.patch({ field, value });
}
delete关键字将从对象中删除属性。然后,当您调用
put()
时,项目对象将不再具有嵌套资源

您可以在控制台上打印出对象,以准确地查看您正在向服务器输入的内容:

console.log(project);

如果只修改一个字段,则可以使用带有参数的
element.patch
,如下所示:

/* ... code to get the project object and the nested proof objects ... */

project.name = 'New Name!';

delete project.proofs;
project.put();
// get project...

update = function(field, value){
  project.patch({ field, value });
}
此外,在大多数情况下,字段的值是通过
更改的,因此您可以重用它:

在控制器中:

// get project...

$scope.update = function(field){
  payload = {};
  payload[field] = $scope.project[field];
  project.patch(payload);
}
在模板中

<!-- Use submit button or ng-blur... -->
<input ng-model="project.FIELD_NAME" /> 


两件可能有用的事情:1)将请求本身放入服务中,只公开一个将返回承诺的方法。通过这种方式,您可以在服务中执行承诺链接/分组,因此您只需在控制器中解析“最终”承诺。2) 使用配置服务定义常量,以便在整个项目中轻松配置实际使用的URL。3)您是否查看了$q.all以解决所有问题:)?@mgon您知道这里发生了什么(关于帖子)?我对此也很感兴趣,因为我目前正在评估在我的应用程序中使用Restanglar。我有很多这样的嵌套场景。您使用的是哪个版本的Restangular?
<!-- Use submit button or ng-blur... -->
<input ng-model="project.FIELD_NAME" />