Angular 1.5、ES6インポートモジュール構文を使用するUIルーターと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番目の質問。 ES6のインポート/エクスポートでコントローラー: "loginCtrl as login"構文を使用するにはどうすればよいですか?
「login/login.ctrl.js」内の「app」変数を参照していますが、変数が定義されていません(定義する前にコントローラーをインポートしているため)。
編集:とにかく、各モジュールには独自のスコープがあるため、この方法で異なるモジュールの変数を参照することはできません。
私が考えている解決策は次のとおりです:
「login/login.ctrl.js」内に新しいモジュールを作成します
'use strict';
import angular from 'angular';
angular.module('ctrlsModule', [])
.controller('LoginCtrl', function () {
});
メインの「アプリ」モジュールの依存関係としてモジュールを追加します
'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番目の質問の意味がわかりませんが、ES6のcontrollerAs
はES5と同じように機能するはずです。