4

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

在自定义花式框(又名灯箱,一个对话框)中,我显示带有插值的内容。

在服务中,在“打开”fancybox 方法中,我愿意

 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 结束之前加载的,所以不到一秒钟后,我用这些值刷新了对话框内容。

plunkr 有效,但我想避免在完全编译之前显示“el”:我只想在 $compile 完成他的工作后显示它

有没有办法知道 $compile 什么时候结束,所以我只会在那之后才在 fancybox 上显示内容?

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 回答