(我使用Babel可以使用ES6)
当我致电addConfigurationToCart()
时,我得到:
ReferenceError:未定义订单。
但是在构造函数中我没有。这是为什么?如果我将Order作为参数添加到addConfigurationToCart
class ConfigCtrl {
constructor($state, api, Order) {
this.current = Order.current;
}
addConfigurationToCart() {
Order.saveConfiguration();
$state.go('order');
}
}
答案 0 :(得分:1)
您必须向全班其他人公开服务。
class ConfigCtrl {
constructor($state, api, Order) {
...
this.Order = Order;
}
addConfigurationToCart() {
this.Order.saveConfiguration();
...
}
}
答案 1 :(得分:1)
constructor
和addConfigurationToCart
函数具有不同的范围(在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
}
}