Angularjs工厂ES6

时间:2018-03-09 22:29:40

标签: javascript angularjs ecmascript-6

我已经在我目前的工作上做了一段时间的项目,他们正在使用Angulajs作为前端。最近我正在尝试实施ES6标准。该项目使用Factory从后端包装API服务,如下所示:

'use strict';
angular.module('products').factory('Products', ['$resource',
  ($resource)=> {
    return $resource('api/products/:productId', {
      productId: '@id'
    },{
      update: {
        method: 'PUT'
      },
      getProductsByType : {
        url: 'api/:schoolIdProduct/products/:Type',
        params: {
          schoolIdProduct: ':schoolIdProduct',
          Type: ':Type'
        },
        isArray: true
      }
    });
  }
]);

现在,当我们从控制器调用Factory时,我只需添加工厂然后调用这样的函数:

$rootScope.supplies = Products.getProducts({
  schoolIdProduct: schoolId,
  Type: 'Supplies'
});

因此,当我尝试使用箭头函数和then()等待响应时,浏览器控制台告诉我这不是一个函数。如何更改我的代码以使用ES6标准并获得类似的内容?

    Products.getProducts({
      schoolIdProduct: schoolId,
      Type: 'Supplies'
    }).then( (response) =>{
      $rootScope.supplies = response;
    });

1 个答案:

答案 0 :(得分:0)

所以你没有从响应中得到承诺,所以需要用$ q或bluebird来宣传你的回复。

提到了两种解决方案,并且您正在使用ngResource来获得共鸣。

使用$ q:https://docs.angularjs.org/api/ng/service/ $ q

角度文档链接

你也可以使用bluebird库并使用promise library转换响应

let promise = new Promise(function (resolve, reject) {
  try {
    resolve(Products.getProducts({
        schoolIdProduct: schoolId,
        Type: 'Supplies'
      })) 
  } catch (error) {
    reject( error)
  }
})
return promise