Angular 1.5.0与ES6 - 控制器导出不起作用

时间:2017-01-16 16:29:35

标签: javascript angularjs ecmascript-6

我有一个基于模块的应用程序。 app load de modules,每个模块加载控制器和路由器,路由器加载视图。如果我使用这样的控制器绑定工作正常:

...
module.controller('Ctrl',  function(){
  const vm = this
  // Controller stuff
});
...

但如果我尝试从外部文件加载,则不会这样:

// module.controller.js
function Ctrl(){
  // Controller stuff
}
export default Ctrl

并且这样打电话:

// module.js
import controller from './module.controller.js'
...
module.controller(controller.name, controller)
...

仍然controller.name是有效的'Ctrl'字符串,controller是有效的函数。是否缺少某些东西,例如导出控制器功能的不同方法?

由于

1 个答案:

答案 0 :(得分:1)

可以看到您正在使用function来创建控制器,但是您需要使用一个类,其中包含构造函数。在此构造函数中注入依赖项,如果将它们作为范围属性关联,则可以访问它们:

export default class Ctrl {
    /** @ngInject */
    constructor($timeout) {
        this.name = 'Ctrl';
        this.$timeout = $timeout;

        this.consoleName();
    }
    consoleName() {
        var vm = this;

        this.$timeout(function() {
            console.log(vm.name);
        }, 1000);
    }
}

JSFiddle:https://jsfiddle.net/7fq4dnt9/

我建议这篇文章比较语法和声明:

https://medium.com/@daviddentoom/switching-to-es6-with-angular-1-x-is-easy-a08c40c2fc72#.e7i1avfqp