0

出力を出力するカスタム ディレクティブをホームページに表示しようとしています。devtools のネットワーク タブで、コントローラーが 2 回読み込まれることを確認しました。

コントローラ:

var homeController = function($log,leaguesFactory){
        var self = this;
        self.leagues = [];

            leaguesFactory.loadLeagues()
                .then(function(leagues){
                    self.leagues = leagues.data.Competition;
                });
        self.message= 'test message';
};

指令:

var leaguesTabs = function(){
        return {
            restrict : 'E',
            templateUrl : 'app/home/leagues-tabs.tpl.php',
            scope: {
                leagues: '='
            },
            controller: 'homeController',
            controllerAs: 'homeCtrl'
        };
};

ui-router 状態:

$stateProvider
            .state('home',{
                url : '/',
                templateUrl : 'app/home/home.tpl.php',
                controller : 'homeController',
                controllerAs: 'homeCtrl'
            })...

ディレクティブで homeCtrl を使用したいだけですが、状態プロバイダーもそれをロードし、2 回ロードするようです。ディレクティブからコントローラーを削除すると、homeCtrl にアクセスできなくなります。homeCtrl を stateprovider から削除すると、home.tpl.php にアクセスできなくなります。

home.tpl.php:

<div>
    <leagues-tabs></leagues-tabs>
</div>

何か案が?

4

2 に答える 2

0

実際には次のステップに関連する問題:

  • ui-router は URL '/' の処理を​​開始します
  • ui-router は「homeController」のインスタンスを作成します
  • ui-router はビュー 'app/home/home.tpl.php' をレンダリングします
  • Angular は、カスタム ディレクティブの使用法を参照してください - 「leagues-tabs」
  • 「leagues-tabs」ディレクティブは「homeController」のインスタンスを作成します
  • 「leagues-tabs」はビュー「app/home/home.tpl.php」をレンダリングします

次の可能な解決策のいずれかに従うことができます。

  • 「leagues-tabs」のコントローラーを特別なものに変更
  • ui-router 状態定義からコントローラーの使用を削除
于 2015-05-03T12:59:03.090 に答える