大規模なアプリケーションでは、アプリケーションのモジュール性を高めるために、Webアプリケーションを個別の部分ページに編成する場合があります。場合によっては、Angular$http.getまたはJQuery$.loadのいずれかを使用してXHRまたはAjaxリクエストを介してロードされたページの一部をコンパイルすると、エラーが発生します。
シナリオを例として使用すると、正確にコハナPHPフレームワークを使用しているため、サーバーレベルでWebアプリケーションのモジュール性を制御できます。いつものように、すべてのテンプレートとページはビューに分離され、すべてのHTML、JS、CSSがプレゼンテーション層に一緒に残されます。
これにより、クライアント側の処理でJavascript MVW / MVCスタックを実装するための大きな柔軟性が得られます。これは、私のWebアプリがバックエンドアプリケーションからデータをフェッチするためのAJAX要求に大きく依存しているためです。私のシナリオでは、AngularJS以下を使用して、モデルからのデータがクライアントにどのように表示されるかについての単純な疑似です。
コハナモデル>コハナコントローラー>コハナビュー>XHR>JQuery \ Angular> DOM
私のアプリケーションでの私の役割の1つは、アプリケーションを解決するために、実際にバンプを与えて、代謝ドリンクを数本飲ませることです。モーダルダイアログがあり、ページの一部がサーバーからXHRを介して読み込まれ、選択したDOMにアタッチされている場所です。
問題は、Angularが部分ページをコンパイルしようとしたときに、ng-controllerディレクティブが見つかったときに、処理されたディレクティブを参照する関数を探すことです。DOMパーサーによってまだ評価されていないため、コントローラーが見つからない場合にエラーが発生しました。ただし、部分ページをロードする直前にアプリケーションのどこかで関数を事前に削除すると、すべて問題ありません。以下は、リンクをクリックしたときにリンクディレクティブから呼び出されるダイアログサービスを設定する方法の例です。
var dialogService = angular.module('dialog.service', []);
dialogService.factory('Dialog', function($http,$compile){
var dialogService = {};
dialogService.load = function(url, scope){
$("#dialog:ui-dialog").dialog( "destroy" );
$("#dialog").attr('title','Atlantis');
$http.get(url).success(function (data) {
html = $compile(data)(scope);
$('#dialog-content').html(html);
$("#dialog").dialog({
width: '600px',
buttons: {
"Ok": function() {
$( this ).dialog( "close" );
return true;
},
},
close: function(){
if (typeof (onClose) == 'function') { onClose(); }
},
});
});
}
return dialogService;
});
いくつかの調査の後、私はいくつかの解決策を見つけ、私のような他の初心者のための私の答えについて仲間と共有しました。(私の英語はごめんなさい)。