从ES6类方法调用角度服务

时间:2015-09-14 12:44:37

标签: angularjs ecmascript-6 babeljs

(我使用Babel可以使用ES6)

当我致电addConfigurationToCart()时,我得到:

  

ReferenceError:未定义订单。

但是在构造函数中我没有。这是为什么?如果我将Order作为参数添加到addConfigurationToCart

,我会收到相同的错误
class ConfigCtrl {
    constructor($state, api, Order) {
        this.current = Order.current;
    }

    addConfigurationToCart() {
        Order.saveConfiguration();
        $state.go('order');
    }
}

3 个答案:

答案 0 :(得分:1)

您必须向全班其他人公开服务。

class ConfigCtrl {
  constructor($state, api, Order) {
      ...
      this.Order = Order;
  }

  addConfigurationToCart() {
      this.Order.saveConfiguration();
      ...
  }
}

答案 1 :(得分:1)

constructoraddConfigurationToCart函数具有不同的范围(在JS意义上),当然,来自一个范围的变量在另一个范围内不可用,除非将变量分配给{{{ 1}}属性或来自父范围的变量。

私有变量在ES2015 +中仍然没有,但有some workarounds可以做到这一点。

最明显的方法是使用局部变量:

this

更成功地在类中提供私有变量的惯用方法:

let $state, api, Order;

class ConfigCtrl {
  static $inject = ['$state', 'api', 'Order'];

  constructor(...args) {
    [$state, api, Order] = [...args];
    // ...
  }

  addConfigurationToCart() {
    Order.saveConfiguration();
    // ...
  }
}

答案 2 :(得分:1)

controller: class {
    constructor($http, Restangular, $state) {
        Object.assign(this, {$http, Restangular, $state});
    }
    doIt() {
       // use this.$http, this.Restangular & this.$state freely here
    }
}