0

ブートストラップ ダイアログを使用して、新しい要素を編集および作成しています。新しい要素を作成するためのダイアログを開く関数は、jQuery クリック ハンドラーから呼び出されます。これは、サード パーティのライブラリによって行われているためです。

要素を編集するためのダイアログを開く関数は、ディレクティブを介して呼び出されます。

ディレクティブを介してダイアログを開くと、毎回正常に動作します。また、jQuery クリック ハンドラーを介してダイアログを開くと、最初は正常に動作しますが、ダイアログを閉じてクリック ハンドラーを介して再度開こうとすると、ディレクティブを使用してボタンをクリックするまで開かれず、両方とも(編集と新規項目) ダイアログが開きます。

ここで簡単な例を作成しました: http://plnkr.co/edit/HGvrqH?p=preview

私は何を間違っていますか?

4

1 に答える 1

1

Earth から Oz への遷移を $scope.$apply 呼び出しでラップする必要があります。

window.newItem = function(){
  $scope.$apply(function () {
    $scope.newItem();
  });
};

Angular UI Boostrap Dialog のソースを見ると、 229 行目あたりのテンプレートの読み込みに関するものなど、promise ベースの状態管理に気付くかもしれません。テンプレートかどうか (最初にボタンを押した後に変化する条件)。$qのドキュメントは、$apply を使用して Angular のダイジェスト ループ内にそのようなアクティビティを配置する必要があることをうまく示しています。

于 2013-03-19T03:22:32.303 に答える