2017-01-16 8 views
2

私はモジュールベースのアプリケーションを持っています。アプリはモジュールをロードし、各モジュールはコントローラとルータをロードし、ルータはビューをロードします。作品を結合コントローラは、うまく私はこのように使用している場合:ES6で角度1.5.0が動作しない

... 
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〜を出力すると有効な関数が返されます。しかし、プロパティに関しては、関数から返された値にしかアクセスできませんが、角度コントローラは〜〜〜に自動的に戻ります。 –

答えて

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

それは私が必要としたすべてのケースで、私の問題を解決しました、ありがとう。しかし、いくつかのサーバでは、あなたの提案がすべてのケースで機能していた間、私のコードに変更を加えずに働いたので、いくつかのテストの後、それはいくつかのサーバ設定の問題のようです。 –

関連する問題