4

http://plnkr.co/edit/GRVZl35D1cuWz1kzXZfF?p=preview

カスタム ファンシー ボックス (別名ライトボックス、ダイアログ) で、補間された値でコンテンツを表示します。

サービスでは、「オープン」ファンシーボックスメソッドで、私はそうします

 open: function(html, $scope) {
        var el = angular.element(html);
        $compile(el)($scope); // how to know when the $compile is over?
        $.fancybox.open(el); // the uncompiled is shown before the compiled
      }

問題は、ダイアログのコンテンツが $compile の終了前に読み込まれるため、1 秒も経たないうちにダイアログのコンテンツが値で更新されることです。

plunkr は機能しますが、完全にコンパイルされる前に "el" が表示されるのを避けたい: $compile が仕事を終えた後にのみ表示したい

$compile がいつ終了したかを知る方法はありますか?

4

2 に答える 2

0

$scope をサービスに注入することはできません。シングルトン $scope のようなものはありません。

だから試してみる代わりに$compile(el)($scope);

var compiledEl = $compile(el);
 ....

$compileコンパイルされたデータを返します。

補足として

ディレクティブにサービスを提供し、代わりにそれをディレクティブにコンパイルします。正しい方法だと思います。

于 2013-11-02T15:28:05.393 に答える
0

ngDialog モーダルとポップアップ プロバイダーで同じ問題が発生しました。高さに基づいてダイアログを配置する必要がありました。ただし、高さはコンパイルされた DOM に依存していました。

最終的に、その投稿で説明されているように、$timeout を使用して解決策を見つけました: http://blog.brunoscopelliti.com/run-a-directive-after-the-dom-has-finished-rendering/

あなたのコードでは、次のようになります。

open: function(html, $scope) {
    var el = angular.element(html);
    $compile(el)($scope);
    $timeout(function() {
        $.fancybox.open(el); 
    }, 0);
}
于 2015-10-15T10:57:19.183 に答える