Javascript 如果从范围中删除指令,则在ng之后执行指令回调

Javascript 如果从范围中删除指令,则在ng之后执行指令回调,javascript,angularjs,angularjs-directive,callback,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Callback,Angularjs Scope,我的页面上有一个角度指令,在ng if内 我有一个服务,它公开了一个函数,该函数作为参数接收回调。我们把这个函数称为functionX 当ng if表达式的计算结果为true时,my指令调用functionX,并向其发送回调以在将来某个时候执行 现在,问题是:如果我的ng If表达式现在变为false,服务仍然执行我发送给它的回调 如何处理这个问题有什么想法吗 您可以将functionX包装在一个promise中,并对已解析的promise使用.then()方法来执行以前的回调函数吗 这将允许

我的页面上有一个角度指令,在ng if内

  • 我有一个服务,它公开了一个函数,该函数作为参数接收回调。我们把这个函数称为functionX

  • 当ng if表达式的计算结果为true时,my指令调用functionX,并向其发送回调以在将来某个时候执行

    现在,问题是:如果我的ng If表达式现在变为false,服务仍然执行我发送给它的回调


    如何处理这个问题有什么想法吗

    您可以将functionX包装在一个promise中,并对已解析的promise使用.then()方法来执行以前的回调函数吗

    这将允许您在指令中执行,而不是在服务中执行


    我想这取决于函数在做什么,但听起来这可能是一个潜在的解决方案。

    您可以将functionX包装在承诺中,并对已解析的承诺使用.then()方法来执行以前的回调函数

    这将允许您在指令中执行,而不是在服务中执行


    我想这取决于函数在做什么,但听起来这可能是一个潜在的解决方案。

    如果计算结果为false,我已经找出了在指令的作用域被ng破坏后导致回调执行的原因:

    该服务正在将指令作用域注册到PubSub发布事件,并且在指令作用域被销毁后不会将其取消注册。这意味着有一个参考被破坏的范围挂在那里


    总而言之:在注册PubSub活动时,一定要确保自己清理干净

    如果计算结果为false,我已经找出了在指令的作用域被ng破坏后执行回调的原因:

    该服务正在将指令作用域注册到PubSub发布事件,并且在指令作用域被销毁后不会将其取消注册。这意味着有一个参考被破坏的范围挂在那里


    总而言之:在注册PubSub活动时,一定要确保自己清理干净

    请粘贴一些代码,以便我们可以帮助您。我已经找出了在ng破坏指令作用域后执行回调的原因(如果计算为false):服务将指令作用域注册到PubSub发布事件,而不是在指令作用域被破坏后取消注册。这意味着有一个参考被破坏的范围挂在那里。。。总而言之:在注册PubSub活动时,一定要确保自己清理干净!请粘贴一些代码,以便我们可以帮助您。我已经找出了在ng破坏指令作用域后执行回调的原因(如果计算为false):服务将指令作用域注册到PubSub发布事件,而不是在指令作用域被破坏后取消注册。这意味着有一个参考被破坏的范围挂在那里。。。总而言之:在注册PubSub活动时,一定要确保自己清理干净!Tx@iangregson!这个解决方案的问题是.then只执行functionX一次,而对于回调,它每次在服务中触发时都会执行。还有其他想法吗?还有,为什么一旦ngIf的计算结果为false,它的作用域实例上仍然挂着回调函数?又来了!恐怕我一时想不出任何其他想法——如果你发布一些代码,以及你试图用这些代码实现的目标,也许我们可以走得更远。关于第二点,我记得ngIf上的文档说元素将从DOM中删除,而不是隐藏(就像ngHide那样),但我不记得它保证所有内容都将从执行上下文中删除。我还没有检查过这个,只是在记忆中。Tx@iangregson!这个解决方案的问题是.then只执行functionX一次,而对于回调,它每次在服务中触发时都会执行。还有其他想法吗?还有,为什么一旦ngIf的计算结果为false,它的作用域实例上仍然挂着回调函数?又来了!恐怕我一时想不出任何其他想法——如果你发布一些代码,以及你试图用这些代码实现的目标,也许我们可以走得更远。关于第二点,我记得ngIf上的文档说元素将从DOM中删除,而不是隐藏(就像ngHide那样),但我不记得它保证所有内容都将从执行上下文中删除。我还没有检查这个,只是回忆一下。