AngularJs,Django RESTful和Restangular:使用一系列超链接

时间:2017-01-25 17:32:21

标签: angularjs django rest nested restangular

我无法配置restangular以在我的响应对象中使用api url列表。

目前,我的对象响应如下:

{
    folders: ['http://localhost:8000/api/folder/1', 
              'http://localhost:8000/api/folder/2',
              'http://localhost:8000/api/folder/3']
}

但我想让它返回文件夹对象

{
    folders: [{
                  files: ['http://localhost:8000/api/file/1'
                          'http://localhost:8000/api/file/2']
              }, 
              {
                  files: ['http://localhost:8000/api/file/3']
              },
              {
                  files: ['http://localhost:8000/api/file/4']
              }]
}

(然后最终文件夹对象中的文件对象):

{
    folders: [{
                  files: [{},{}]
              }, 
              {
                  files: [{}]
              },
              {
                  files: [{}]
              }]
}

如何通过addResponseInterceptor或其他方式配置restangular以使用嵌套超链接数组

1 个答案:

答案 0 :(得分:0)

我没有找到一个解决方案,可以独立地对所有嵌套的URL执行get(),而无需在控制器中显式执行。

因此,对于这些两次嵌套的jsons,我创建了三个不同的对象,而不是一个完整的橱柜对象。 Restangular比可以在返回的对象上使用put和patch方法。

然后我遍历文件柜中的每个文件夹,然后依次查看文件夹中的每个文件,以便将所有对象都放入视图中。

如果有人有更好的方式让我知道!

vm.cabinet = {};
vm.folders = [];
vm.files = {}

Cabinet.get(id).then(cabinetSuccessFn, errorFn);

function cabinetSuccessFn(response) {
        vm.cabinet = response;
        vm.cabinet.folders.map(function(folder) {
          return Folder.get(parseInt(folder.substr(folder.lastIndexOf('/', folder.length - 2) + 1).slice(0, -1))).then(folderSuccessFn, errorFn);
        });
        vm.loading = false;
      }

function folderSuccessFn(response) {
        vm.folders.push(response);
        vm.files[response.id] = [];

        response.files.map(function(file) {
          return Files.get(parseInt(file.substr(file.lastIndexOf('/', file.length - 2) + 1).slice(0, -1))).then(fileSuccessFn, errorFn);
        });
      }

function fileSuccessFn(response) {
        vm.filess[response.folder.substr(response.folder.lastIndexOf('/', response.folder.length - 2) + 1).slice(0, -1)].push(response);
      }

function errorFn(response) {
    $log.error('unable to load resource');
    $log.error(response);
}