关于在Angular的$ digest方法中使用jQuery我有什么遗漏?

时间:2016-06-17 03:19:38

标签: angularjs jquery-ui

我无法理解在Angular的摘要周期中使用jQuery。

我正在使用ng-repeat =来加载内容。内容(使用$ compile)最终成为具有两个子div和几个孙元素的div。在加载了ng-repeat的arrary之后,我想使用jQuery的children.each(),如下所示:

callBack = function(index) {
    var objParent = $('#' + $scope.panes[index].windID); //entire window
    var objChild = [];
    //objChild[0] = title bar
    //objChild[1] = contentpane
    objParent.children().each(function(i){
        objChild[i] = $(this);
    });
    //more code
} 

问题在于,随着我的开放窗口方法越来越大,功能越来越多,Angular的摘要开始以不同的方式工作。我的意思是,在我添加我的最大化/恢复/最小化方法和按钮以匹配之前,当我的控制器到达上面的代码时,窗口已经通过范围消化并显示在dom中(虽然隐藏了{display:none}对于jQuery的淡入)意味着上面的代码有效。

然而现在有更多的东西要被消化,当它到达那一点时,摘要没有完成,并且子查找器失败,因为DOM还没有更新。我必须使用$ timeout,我越来越需要增加时间。我现在必须等待大约600毫秒,我觉得这会从图标点击到窗口显示减慢。

现在,如果我在$ timeout()之前添加一个$ scope。$ apply(),它就好像只是强迫摘要快点。我可以将时间缩短到0毫秒,一切都能立即生效。然而,我得到了正在进行的摘要错误。我认为$ timeout等待摘要的结束了吗?

我已经尝试了各种方法,甚至是$$ postDigest,但唯一可行的方法是强制$ apply会导致最终用户永远不会看到甚至关心的摘要进度错误,因为它实际上是这一切都有效。这不是我这么多问题,但它让我感到困惑,因为在打开和关闭我的窗口“窗格”后,正在进行的摘要错误可以在控制台中繁殖。

这是一个旧版本的链接:AkadineWebOS

该应用程序比Angular更多jQuery,我只是使用Angular来获取它的http模块,并且可以轻松地推送和拼接我的窗口数组并让ng-repeat魔法处理dom。 jQuery通过拖动,调整大小,淡入/淡出,将窗口置于打开状态以及其他大部分内容来完成所有繁重工作。

所以这是我的问题:有人可以向我解释一下我对Angular的摘要的工作方式缺少了什么吗?

1 个答案:

答案 0 :(得分:0)

正如Claise所说,jQuery并不像角度一样asyc。我实际上只需将$ timeout()更改为普通的'setTimeout(),基本上就是我的jQuery回调。现在它很棒!