9

コントローラ、js ファイル、およびテンプレートをルート グループに基づいて動的にロードすることは可能ですか? 動作しない疑似コード:

$routeProvider.when('/:plugin', function(plugin) {
  templateUrl: 'plugins/' + plugin + '/index.html',
  controller: plugin + 'Ctrl',
  resolve: { /* Load the JS file, from 'plugins/' + plugin + '/controller.js' */ }
});

このような質問をたくさん見てきましたが、ルート グループに基づいて js ファイル/コントローラーをロードするものはありません。

4

4 に答える 4

3

これには RequireJS を使用できます。何かのようなもの:

$routeProvider.when('/:plugin',{
    templateUrl: 'plugins/' + plugin + '/index.html',
    controller: plugin + 'Ctrl',
    resolve: {myCtrl: function($q){
        var deferred = $q.defer();
        require('myCtrlFile',function(){
            deferred.resolve();
        });
        return deferred.promise;
    }}
});

また、コントローラーを動的に登録する必要があります。アプリ構成でプロバイダーを公開する。

app.config(function($controllerProvider,$compileProvider,$filterProvider,$provide){
    app.register =
        {
            controller: $controllerProvider.register,
            directive: $compileProvider.directive,
            filter: $filterProvider.register,
            factory: $provide.factory,
            service: $provide.service
        };
});

コントローラーファイルは次のようになります。

define(['app'],function(app){
    app.register.controller('myCtrl',MyCtrlFunction);
});

これは単なる一般的な考え方です。ここで説明したものと同様の実装を使用します

私もui-routerを使っています。動作が ngRoute と同じかどうかはわかりません。

于 2014-01-03T17:43:48.473 に答える