1

アプリケーションで次のエラーが発生します。

エラー

問題は、特定のモジュールをロードするときにのみ表示されます。これが私のメイン モジュールです。

app.module.js

(function () {

    'use strict';

    angular
        .module( 'app', [
            /*
             * Shared modules
             */
            'app.layout',
            'app.core',
            /*
             * Feature areas
             */
            'app.users',
            'app.purchases'//This is the module that generates the modulerr error
        ] )
        .config( [ '$locationProvider', hashbagRemove ] );


    function hashbagRemove( $locationProvider ) {

        $locationProvider.html5Mode( true );

    }

})();

これは、エラーを生成するモジュールです。

purchases.module.js

(function () {

    'use strict';

    angular.module( 'app.purchases', [
        'app.purchases.suppliers'
    ] );

})();

サプライヤー.module.js

(function () {

    'use strict';

    angular.module( 'app.purchases.suppliers', [] );

})();

ご覧のとおり、モジュラー アプリケーションを持っています。そのモジュールをロードすると、アプリケーションがクラッシュします。すべてのコントローラーとファクトリをチェックして、そこに間違いがないかどうかを確認しました。また、それらはすべて正しいです。必要なスクリプトをすべて読み込んでいることは既に確認しましたが、エラーが続く理由がわかりません。

私のアプリケーションの構造をより明確にするために、次の写真を示します。木

そしてここにindex.htmlがあります

<!DOCTYPE html>
<html lang="es" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title>SOS Control</title>
    <link rel="stylesheet" href="./components/bootstrap/bootstrap-3.1.1.min.css"/>
    <link rel="stylesheet" href="./components/font-awesome/font-awesome-4.4.0.min.css"/>
    <base href="/"/>
</head>
<body>

    <div ui-view></div>

<!--==================================================== SCRIPTS ====================================================-->

    <!----------------------------------------------Other-->
    <!--<script src="./components/lodash/lodash-3.10.1.min.js"></script>-->
    <script src="./components/underscore/underscore-1.8.3.min.js"></script>

    <!---------------------------------------------JQuery-->
    <script src="./components/jquery/jquery-2.1.4.min.js"></script>

    <!--------------------------------------------Angular-->
    <script src="./components/angular/angular-1.4.5.min.js"></script>
    <script src="./components/bootstrap/ui-bootstrap-0.13.4.min.js"></script>
    <script src="./components/angular-ui-router/angular-ui-router-0.2.15.min.js"></script>
    <script src="./components/restangular/restangular-1.5.1.min.js"></script>

    <!---------------------------------------Main Modules-->
    <script src="./app.module.js"></script>
    <script src="./modules/core/core.module.js"></script>
    <script src="./modules/layout/layout.module.js"></script>

    <!---------------------------------------Users Module-->
    <script src="./modules/users/users.module.js"></script>
    <script src="./modules/users/users.routes.js"></script>
    <script src="./modules/users/signin/signin.controller.js"></script>
    <script src="./modules/users/signout/signout.factory.js"></script>

    <script src="./modules/users/account/account.module.js"></script>
    <script src="./modules/users/account/account.routes.js"></script>
    <script src="./modules/users/account/edit-data/edit-data.controller.js"></script>
    <script src="./modules/users/account/reset-password/reset-password.controller.js"></script>

    <!-----------------------------------Purchases Module-->
    <script src="./modules/purchases/purchases.module.js"></script>
    <script src="./modules/purchases/purchases.routes.js"></script>

    <script src="./modules/purchases/suppliers/suppliers.module.js"></script>
    <script src="./modules/purchases/suppliers/suppliers.routes.js"></script>
    <script src="./modules/purchases/suppliers/suppliers-dashboard.controller.js"></script>
    <script src="./modules/purchases/suppliers/create-supplier/create-supplier.factory.js"></script>
    <script src="./modules/purchases/suppliers/create-supplier/create-supplier.controller.js"></script>
    <script src="./modules/purchases/suppliers/read-supplier/read-supplier.factory.js"></script>
    <script src="./modules/purchases/suppliers/read-supplier/read-supplier.controller.js"></script>
    <script src="./modules/purchases/suppliers/update-supplier/update-supplier.factory.js"></script>
    <script src="./modules/purchases/suppliers/update-supplier/update-supplier.controller.js"></script>

</body>
</html>

更新 1

更新されたエラー (Angular の dev. バージョンを使用) では、エラーは次のファイルから生成されているようです。

サプライヤー.ルート.js

(function () {
    'use strict';

    angular
        .module( 'app.purchases.suppliers' )

        // Collect the ui-route states
        .constant( 'states', getRouteStates() )

        // Configure the ui-route states and state resolvers
        .config( [ '$stateProvider', '$urlRouterProvider', 'states', stateConfigurator ] );

    function stateConfigurator( $stateProvider, $urlRouterProvider, states ) {

        states.forEach( function ( state ) {

            $stateProvider.state( state.name, state.config );

        } );

        $urlRouterProvider.otherwise( "/" );

    }

    // Define the ui-route states
    function getRouteStates() {
        return [
            {
                name: 'suppliersDashboard',
                config: {
                    url: '/compras/proveedores',
                    templateUrl: './modules/purchases/suppliers/suppliers-dashboard.view.html',
                    title: 'Menu Principal de Proveedores',
                    controller: 'SuppliersDashboardController',
                    controllerAs: 'vm'
                }
            },
            {
                name: 'createSupplier',
                config: {
                    url: '/compras/proveedores/nuevo',
                    templateUrl: './modules/purchases/suppliers/create-supplier/create-supplier.view.html',
                    title: 'Nuevo Proveedor',
                    controller: 'CreateSupplierController',
                    controllerAs: 'vm'
                }
            },
            {
                name: 'listSupplier',
                config: {
                    url: '/compras/proveedores/listado',
                    templateUrl: './modules/purchases/suppliers/read-supplier/list-supplier.view.html',
                    title: 'Listado de Proveedores',
                    controller: 'ReadSupplierController',
                    controllerAs: 'vm'
                }
            },
            {
                name: 'detailSupplier',
                config: {
                    url: '/compras/proveedores/:supplierId/:supplierName',
                    templateUrl: './modules/purchases/suppliers/read-supplier/detail-supplier.view.html',
                    title: 'Detalles del Proveedor',
                    controller: 'ReadSupplierController',
                    controllerAs: 'vm'
                }
            },
            {
                name: 'updateSupplier',
                config: {
                    url: '/compras/proveedores/:supplierId/:supplierName/editar',
                    templateUrl: './modules/purchases/suppliers/update-supplier/update-supplier.view.html',
                    title: 'Editar Proveedor',
                    controller: 'UpdateSupplierController',
                    controllerAs: 'vm'
                }
            }
        ];
    }

})();

私がしていることはstates、状態プロパティを保存する場所と呼ばれる各モジュールで定数を作成し (私は ui-router を使用しています)、module.config定数状態を反復処理して状態を に追加すること$stateProviderです。

問題を引き起こしていると思われるのは、すべてのモジュールで同じ定数を宣言することですstates.2つの異なるモジュールが同じ名前の定数を持つことはできませんか?

4

2 に答える 2

1

モジュール パターンを使用していることがわかりました。それは良いことです。

悪い点は、スクリプトがコンパイルされた (からロードされた)直後のapp.purchasesモジュール呼び出しの時点で、コンパイルされていないことです。index.htmlapp.purchases.suppliers

解決策:これらのスクリプトは で参照する順序で実行されるため、ここでは順序が重要ですindex.html

  • モジュール定義<script>...</script>を参照する要素を、モジュールを参照する要素の上に移動します。app.purchases.suppliersapp.purchases
  • モジュールにリンクされたユニット (サービス、コントローラー、ディレクティブなど) が、リンクされたモジュール定義を含むファイルの直後にあることを確認してください。

  • 最後に、他のすべてのモジュールを使用するメイン モジュール ファイルを参照し、その後は独自のユニット (サービス、コントローラー、ディレクティブ、構成など) を参照します。

  • モジュール自体の依存関係についてもこのルールに従ってください (コントローラーが何らかのサービスを使用している場合は、そのサービスがコントローラーの上で参照されていることを確認してください)。

アドバイス:常に最初に参照する - 他のユニットに依存しないユニットを含むファイル。これについて心配するのをやめるには、使用を検討するかもしれませんrequireJS

于 2015-10-18T22:54:11.087 に答える
1

問題は、 purchases.routes.jsで空の json 配列を宣言したことです。

(function () {
'use strict';

angular.module('app.purchases')

    // Collect the ui-route states
    .constant('states', getRouteStates())

    // Configure the ui-route states and state resolvers
    .config(['$stateProvider', '$urlRouterProvider', 'states', stateConfigurator]);

function stateConfigurator($stateProvider, $urlRouterProvider, states) {

    states.forEach(function (state) {

        $stateProvider.state(state.name, state.config);

    });

    $urlRouterProvider.otherwise("/");

}

// Define the ui-route states
function getRouteStates() {
    return [
        {}//THIS WAS THE ERROR
    ];
}

})();

statesその配列にプロパティがなかった定数を反復処理すると、state.nameとを見つけることができませんでしstate.configた。

@charlietflに感謝します。Angularの開発バージョンを使用しているときに完全なエラーが表示されたときに、これを解決できました。

于 2015-10-19T01:37:02.033 に答える