Javascript 如果发生变化,如何钩住ng?
例如,我使用的自定义指令如下:Javascript 如果发生变化,如何钩住ng?,javascript,angularjs,Javascript,Angularjs,例如,我使用的自定义指令如下: <my-directive ng-if="showThis"></my-directive> 当rootScope中定义的showThis变为true或false时,我需要执行一些DOM操作并附加/删除事件处理程序。在工作流过程中可能会发生多次。这就是为什么我有一些问题: 如果,我可以处理ng的更改吗 我应该在哪里执行此操作:myDirective的内部链接函数或控制器函数 我真的需要每次杀死并重新连接事件侦听器以避免内存泄漏吗?或者
<my-directive ng-if="showThis"></my-directive>
当rootScope中定义的showThis
变为true或false时,我需要执行一些DOM操作并附加/删除事件处理程序。在工作流过程中可能会发生多次。这就是为什么我有一些问题:
,我可以处理ng的更改吗
变为true,当ng时,是否每次都会调用链接和控制器功能
当
ng if
中的表达式计算为false时,angular将从DOM中删除您的指令,并触发$scope.$destroy
事件
我应该在哪里执行此操作:myDirective的内部链接功能或控制器功能?由于您的指令已从DOM中删除,因此控制器和链接函数对您都没有任何帮助 我真的需要每次杀死并重新连接事件侦听器以避免内存泄漏吗?或者AngularJS会帮我做吗?
所有附加到已销毁作用域的
$watch
侦听器将由Angular删除。但是,如果将监视程序附加到其他作用域,如$rootScope
,则必须手动删除它们。当DOM元素被销毁时,浏览器将删除附加到指令内部DOM的所有DOM事件侦听器。如果有任何未销毁的事件侦听器附加到DOM(在指令之外),则必须手动删除它们
当ng if变为true时,是否每次都调用链路和控制器功能?对 提供有关销毁指令时应执行的操作的详细信息。如果有ng的更改,我可以处理吗?
当
ng if
中的表达式计算为false时,angular将从DOM中删除您的指令,并触发$scope.$destroy
事件
我应该在哪里执行此操作:myDirective的内部链接功能或控制器功能?由于您的指令已从DOM中删除,因此控制器和链接函数对您都没有任何帮助 我真的需要每次杀死并重新连接事件侦听器以避免内存泄漏吗?或者AngularJS会帮我做吗?
所有附加到已销毁作用域的
$watch
侦听器将由Angular删除。但是,如果将监视程序附加到其他作用域,如$rootScope
,则必须手动删除它们。当DOM元素被销毁时,浏览器将删除附加到指令内部DOM的所有DOM事件侦听器。如果有任何未销毁的事件侦听器附加到DOM(在指令之外),则必须手动删除它们
当ng if变为true时,是否每次都调用链路和控制器功能?对
提供了关于指令销毁时要做什么的更多信息。
< P>在决定一个解决方案之前,你需要考虑一个问题:你是否希望<代码> NG如果处理程序在容器控制器中运行,或者在<代码>我的指令< /代码>链接函数> < /P> 如果处理程序的作用域是容器控制器,则可以在容器控制器实例化期间运行$scope.$watch('showThis',handler)
但是,如果它的作用域是指令,您可能会在(“$destroy”,handler)上查找$scope.$on
回答你的问题:
在链接函数内部,使用函数签名中提供的$scope
Angular将清理它知道的事件侦听器-使用ng click/ng change/ng which
或$watchs
调用$scope
时附加的任何内容。但是,如果您是通过本机javascript绑定事件:是的,您应该清理。不过,该规则有一个主要的例外——如果您绑定到的DOM元素在指令被销毁时被销毁,JS引擎当然会自动为您释放内存
正如@Maximus上面所说的,如果值为true,那么每次ng时都会运行函数,因为DOM元素被完全删除/添加
在决定一个解决方案之前,你需要考虑一个问题:你是否希望<代码> NG如果处理程序在容器控制器中运行,或者在<代码>我的指令< /代码>链接函数> < /P>
如果处理程序的作用域是容器控制器,则可以在容器控制器实例化期间运行
$scope.$watch('showThis',handler)
但是,如果它的作用域是指令,您可能会在(“$destroy”,handler)
上查找$scope.$on
回答你的问题:
在链接函数内部,使用函数签名中提供的$scope
Angular将清理它知道的事件侦听器-使用ng click/ng change/ng which
或$watchs
调用$scope
时附加的任何内容。但是,如果您是通过本机javascript绑定事件:是的,您应该清理。不过,该规则有一个主要的例外——如果您绑定到的DOM元素在指令被销毁时被销毁,JS引擎当然会自动为您释放内存
正如@Maximus上面所说的,如果值为true,那么每次ng时都会运行函数,因为DOM元素被完全删除/添加
您可以在showThis上使用watch。当showThis
变为false
时,整个my directive
元素将从DOM中删除。我不完全确定是否马上去