2017-01-16 56 views
2

我有一个基于模块的应用程序。应用程序加载模块,而每个模块加载控制器和路由器,路由器加载视图。该控制器结合的作品就好了,如果我用这样的:角度1.5.0与ES6 - 控制器导出不起作用

... 
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是一个有效的功能。有什么缺失,如导出控制器功能或其他方法的不同方法?

感谢

+0

您是否从此导入中收到正确的数据?如果您控制导入的值,则可以在控制器模块声明中找到您正在使用的所有内容。 –

+0

是的,当我从'file.js'〜导入控制器并尝试记录〜controller.name〜它打印有效的字符串,并且当我打印〜controller〜时它返回有效函数。但关于属性,我只能访问我从函数返回的值,而角度控制器应该自动返回〜this〜。 –

回答

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

+1

在我需要的所有情况下,解决了我的问题,谢谢。但是,经过一些测试后,它似乎是一些服务器配置问题,因为在某些服务器上,它的工作原理没有改变我的代码,而您的建议适用于每种情况。 –