Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 带有babel和ng annotate/ngInject的基于ECMA6类的控制器导致ReferenceError_Angularjs_Ecmascript 6_Webpack_Babeljs_Ng Annotate - Fatal编程技术网

Angularjs 带有babel和ng annotate/ngInject的基于ECMA6类的控制器导致ReferenceError

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

我有一个Angular 1.4控制器,其方法依赖于资源服务。我已经用
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();
    }
}

啊,非常简单。我该睡觉了。非常感谢。有没有办法在不暴露控制器上的角度服务的情况下执行此操作?我只是不想直接向视图公开服务调用。