2017-01-16 46 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

在我需要的所有情況下,解決了我的問題,謝謝。但是,經過一些測試後,它似乎是一些服務器配置問題,因爲在某些服務器上,它的工作原理沒有改變我的代碼,而您的建議適用於每種情況。 –