【问题标题】:Angularjs Factory ES6Angularjs 工厂 ES6
【发布时间】:2018-03-09 22:29:40
【问题描述】:

在我目前的工作中,我已经在一个项目上工作了一段时间,他们正在使用 Angulajs 作为前端。最近我正在尝试实现 ES6 标准。该项目使用工厂从后端包装 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
      }
    });
  }
]);

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

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

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

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

【问题讨论】:

    标签: javascript angularjs ecmascript-6


    【解决方案1】:

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

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

    使用 $q 的角度文档链接:https://docs.angularjs.org/api/ng/service/$q

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

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

    【讨论】:

    • 我已经尝试为响应做出承诺,但它一直告诉我这不是一个函数。
    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多