angular - ng-if - 如何在渲染ng-if模板后回调

Cha*_*aur 16 javascript jquery angularjs angularjs-directive angularjs-scope

在Angular中,我需要在加载了某个类的元素后调用一个函数.通过ng-if ='expr'控制元素的显示.$ scope.expr的值在某个ajax调用响应后设置.

现在,如果我尝试将$ watch放在expr上,或者使用$ evalAsync.它不起作用.可能是因为这些事件是在模板部分实际运行之前运行的.

下面是一个示例代码:http://jsbin.com/kuyas/1/edit 这里我需要一个关于ng的回调类型 - 如果在模板渲染后执行它.

Joh*_*sch 26

一个可能的答案是创建一个指令,做任何你想做的事情.如果您仅在ng-if控制的HTML部分中使用该指令,则该指令将处于休眠状态,直到ng-if表达式为真.

那会做你想要的吗?


Cha*_*aur 17

问题是无法知道是否使用摘要循环完成了角度,确保所有元素都已渲染.

要解决这个问题,有两种选择

  1. 将回调函数包装在指令中.在ng-if中包含该指令.只有当你想要执行回调时才使表达式成为真.
  2. 在内部调用你的回调函数,setTimeOut(function(){ ... }, 0);因为浏览器默认将所有事件保存在队列中,因此,当摘要循环运行时,你的回调函数将进入队列并在摘要循环结束后立即执行.

  • 我更喜欢使用setTimeout的这个解决方案,允许我做一些不是页面上的小部件或限制在ng_if内部的东西 (3认同)

aBe*_*and 5

在我看来,最简单的解决方案是执行以下操作:

<div ng-if="sectionActivated">
    <div ng-init="callBack()"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

只有在ng-if呈现受影响的内容时才会调用您的回调。