Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果发生变化,如何钩住ng?_Javascript_Angularjs - Fatal编程技术网

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的更改吗

  • 我应该在哪里执行此操作:myDirective的内部链接函数或控制器函数

  • 我真的需要每次杀死并重新连接事件侦听器以避免内存泄漏吗?或者AngularJS会帮我做

  • 如果
    变为true,当
    ng时,是否每次都会调用链接和控制器功能

  • 如果需要,我可以处理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中删除。我不完全确定是否马上去