search

Home  >  Q&A  >  body text

javascript - angularjs的scope会一直缓存在jqcache里

我们在用angularjs做一个单页应用,其中有几个子页面会一直保持循环播放(即用ngview轮流切换几个scope)。但后来我发现页面每切换一次内存都会增长,大概几个小时之后浏览器就崩溃了。经过内存分析,可以确认有很多scope会缓存在jqcache里,然后我去找源代码,发现是以下这段导致的问题:

compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {
      var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';
      $element.data(dataName, scope);
} : noop;

我翻遍其他源代码,也没发现可以清除这部分缓存的代码。请问有什么办法可以解决这个问题?
PS: angularjs的版本为1.5.8,jquery版本为1.7

黄舟黄舟2823 days ago543

reply all(1)I'll reply

  • 天蓬老师

    天蓬老师2017-04-11 10:39:16

    这是个好问题,并且都研究到这个份上了,赞一个!

    这看起来是jq的锅啊,.data方法的缓存。

    解决方法不知道题主找到没,我的解决思路是:
    在ctrl或者directive等销毁的时候$destory是手动调用相关jq的removeData方法,移除掉$ele上的data缓存。

    reply
    0
  • Cancelreply