Angularjs 带有babel和ng annotate/ngInject的基于ECMA6类的控制器导致ReferenceError
我有一个Angular 1.4控制器,其方法依赖于资源服务。我已经用Angularjs 带有babel和ng annotate/ngInject的基于ECMA6类的控制器导致ReferenceError,angularjs,ecmascript-6,webpack,babeljs,ng-annotate,Angularjs,Ecmascript 6,Webpack,Babeljs,Ng Annotate,我有一个Angular 1.4控制器,其方法依赖于资源服务。我已经用ng annotate注释了该类的构造函数,但仍然在方法中找不到该服务: var MyResourceFactory = require("myResource.service"); class MyController { // @ngInject constructor($location, $stateParams, $state, MyResource) { ... // some in
ng annotate
注释了该类的构造函数,但仍然在方法中找不到该服务:
var MyResourceFactory = require("myResource.service");
class MyController {
// @ngInject
constructor($location, $stateParams, $state, MyResource) {
... // some initialization code
}
myMethod(data) {
var resource = new MyResource();
resource.data = data;
resource.save();
}
}
module.exports = angular.module("MyModule", [])
.factory('MyResource', MyResourceFactory)
.controller('MyController', MyController)
.config(routes);
但是,在myMethod
(var resource=new MyResource()
)的第一行执行失败:
ReferenceError: MyResource is undefined
at MyController.myMethod (myModule.module.js:214)
...
使用的技术:
- 角度1.4
- 网页包
- 巴别塔
- ng注释
如何将ngInject应用于ECMA6类方法?
MyResource
是构造函数方法的局部变量,在外部不可用。在这种情况下,通常的做法是使其成为公共财产:
class MyController {
// @ngInject
constructor($location, $stateParams, $state, MyResource) {
this.MyResource = MyResource;
// ... some initialization code
}
myMethod(data) {
var resource = new this.MyResource();
resource.data = data;
resource.save();
}
}
啊,非常简单。我该睡觉了。非常感谢。有没有办法在不暴露控制器上的角度服务的情况下执行此操作?我只是不想直接向视图公开服务调用。