2016-06-17 10 views
1

コントローラがあります。非同期にフェッチする必要があります。これには角型クッキーライブラリが必要です。コントローラを非同期的にロードし、角度モジュールに接続する方法

したがって、jQueryを使用して角クッキーライブラリをフェッチして実行し、コントローラでファイルをフェッチして実行しています。私の現在のコードは以下の通りです:

$.getScript("http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-cookies.min.js", function() { 
    app.requires.push('ngCookies'); 
    $.getScript("js/mailListCtrl.php", function() { 
    console.log("Succesfully fetched controller mailListCtrl"); 
    }); 
}); 

この作品の罰金、およびスクリプトの両方がグローバルスコープで実行されている、しかし、コントローラmailListCtrlは私のモジュールに接続されることはありません。だから、私の問題は、私は、最初のページのロード後に私の角のモジュールにコントローラを添付することはできませんよということです

console.log("mailListCtrl.js is loaded"); // This is executed 

app.controller('mailListCtrl', ['$http', '$timeout', '$cookies', '$scope', function ($http, $timeout, $cookies, $scope) { 

    console.log("mailListCtrl is loaded, and code is executing"); // This is never executed 

    // Lots of code... 

}]); 

:これはmailListCtrl.jsがどのように見えるかです。誰かがこれに対する解決策を持っていれば、私はとても感謝しています。

+0

'app'はグローバル変数ですか?複数のアプリがありますか? – fahadash

+0

アプリは1つだけです。はい、グローバル変数です。 'var app = angular.module(" app "、['ngRoute'、 'angular-loading-bar']); ' – tjespe

答えて

0

解決策は実際にはとても簡単でした。これは長い時間前にあるので、私はからこれを得た場所を覚えていますが、app.configにこのコードを追加すると、角度モジュールの初期ブートストラップの後にコントローラを取り付けることを可能にしていない:

app.controller = function(name, constructor) { 
    $controllerProvider.register(name, constructor); 
    return(this); 
}; 

はNB:注入することを忘れないでください$controllerProviderの依存関係としてapp.config

0

あなたのアプリを手動でBootstrapする必要があるようです。

$.getScript("http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-cookies.min.js", function() { 
    app.requires.push('ngCookies'); 
    $.getScript("js/mailListCtrl.php", function() { 
    console.log("Succesfully fetched controller mailListCtrl"); 

    var myAppDiv = angular.element("#divThatIsApp"); //in quotes should be the ID of the element where you have ngApp declared 
    angular.bootstrap(myAppDiv, ["app"]); // in quotes should be your app name 
    }); 
}); 

あなたの要素からng-appを削除してください。特定のビューを再コンパイルする必要がある場合は、injectorを試してください。技術的には、再コンパイルする必要がないように、アプリケーションを正しく設計する必要があります。

ここにはgood article about bootstrapping angular appsがあります。

+0

あなたの答えをありがとう。しかし、私にはまだ不明な点がいくつか残っています。まず、これは新しい角型アプリを宣言しますか?そして、どの要素が「ngAppが宣言されている要素」の第2の要素ですか?元のアプリを宣言した ''タグですか?最後に、アプリ名は、元のアプリの名前か新しい名前になりますか? – tjespe

+0

アプリを起動します。コントローラー、指令などのすべての設定を保持します。物事をDOMに再適用するだけです(それを置く方法の1つ)。 – fahadash

+1

@tjespe にあなたのngApp = "app"を宣言した場合、#divThatIsAppの代わりに 'document'というようにangle.element(document)を渡してください。 – fahadash

関連する問題