17

ES6インポートモジュール構文を使用して、Angular 1.5、UI RouterをBabelおよびWebpackと組み合わせようとしています。

私の app.js には次のものがあります。

'use strict';

import angular from 'angular';
import uiRouter from 'angular-ui-router';
...
import LoginCtrl from './login/login.ctrl.js'


const app = angular.module("app", [
        uiRouter,
        ...
    ])
    .config(function($stateProvider, $urlRouterProvider) {
        $stateProvider
            .state('login', {
                url: '/login',
                templateUrl: '...', 
                controller: LoginCtrl,
                controllerAs: 'login' 
            })
    });

login/login.ctrl.js には次のものがあります。

'use strict';

export default app.controller("LoginCtrl", function() {
    //code here
});

アプリを起動すると、次のエラー メッセージが表示されます。

ReferenceError: app is not defined
 bundle.js:35422:2
Error: [$injector:modulerr] Failed to instantiate module app due to:
[$injector:nomod] Module 'app' is not available! You either misspelled the module name or forgot to load it.

そして2問目。controller: "loginCtrl as login" 構文を ES6 のインポート/エクスポートで使用するにはどうすればよいですか?

4

1 に答える 1

11

「login/login.ctrl.js」内の「app」変数を参照していますが、変数は定義されていません (コントローラーを定義する前にインポートしているため)。

編集: とにかく、各モジュールには独自のスコープがあるため、この方法で別のモジュールから変数を参照することはできません。

私が考えている解決策は次のとおりです。

  1. 「login/login.ctrl.js」内で新しいモジュールを作成

    'use strict';
    
    import angular from 'angular';
    
    angular.module('ctrlsModule', [])
        .controller('LoginCtrl', function () {
    
        });
    
  2. メインの「アプリ」モジュールの依存関係としてモジュールを追加します

    'use strict';
    
    import angular from 'angular';
    import uiRouter from 'angular-ui-router';
    ...
    import './login/login.ctrl.js';
    
    angular.module('app', [uiRouter, 'ctrlsModule', ...])
        .config(function ($stateProvider, $urlRouterProvider) {
            $stateProvider
                 .state('login', {
                    url: '/login',
                    templateUrl: '...', 
                    controller: 'LoginCtrl',
                    controllerAs: 'login' 
                });
        });
    

私はコードをテストしていませんが、私の言いたいことがわかると思います。2 番目の質問の意味がわかりませんがcontrollerAs、ES6 では ES5 と同じように動作するはずです。

于 2016-02-07T00:09:40.137 に答える