Javascript 角度引导Typeahead-附加到正文-卡住

Javascript 角度引导Typeahead-附加到正文-卡住,javascript,angularjs,angular-ui-bootstrap,angular-routing,angular-ui-typeahead,Javascript,Angularjs,Angular Ui Bootstrap,Angular Routing,Angular Ui Typeahead,当将append to body与routing结合使用时,typeahead显示卡在body上 typeahead-append-to-body="true" 我使用了Angular seed项目和一个简单的Typeahead示例,并复制了这个问题: 加载页 选择“查看2” 选择“查看1” 在输入中键入字母字符“a” 观察附在车身上的typeahead显示器 选择view2 观察显示屏是否仍连接在车身上 问题发生在我尝试的所有浏览器中 我看到文档的click绑定被激活,但是如果页面以前被

当将append to body与routing结合使用时,typeahead显示卡在body上

typeahead-append-to-body="true"
我使用了Angular seed项目和一个简单的Typeahead示例,并复制了这个问题:

  • 加载页
  • 选择“查看2”
  • 选择“查看1”
  • 在输入中键入字母字符“a”
  • 观察附在车身上的typeahead显示器
  • 选择view2
  • 观察显示屏是否仍连接在车身上
问题发生在我尝试的所有浏览器中

我看到文档的click绑定被激活,但是如果页面以前被路由到过,则不会调用dismissClickHandler。这意味着它在第一次运行时效果很好,但是当你回到之前浏览过的页面时,它永远不会启动dismissClickHandler


有什么想法吗?

我相信这是角度引导的一个缺陷,当其作用域被破坏时,不调用
$popup.remove()

它第一次运行正常的原因是,当您导航到view 2时,模板尚未在缓存中准备好,因此需要一些时间才能加载,这使得
dismissClickHandler()
能够执行并隐藏弹出窗口

但是仅仅隐藏弹出窗口是不够的。它应该从DOM中删除


在plunker中,如果您在视图之间来回导航几次,然后检查DOM,您将看到许多悬而未决的
ui
元素仍然存在,但隐藏在document.body中。

runTarm让我走上了正确的轨道。这是我的(相当脏)修复,我在销毁作用域时从DOM中删除typeahead:

  originalScope.$on('$destroy', function(){
    $document.find('[id^=typeahead]').remove();
    $document.unbind('click', dismissClickHandler);
  });

我提交了一个错误:

请注意,在撰写本文时,这是使用Angular(1.4.7)和Angular UI引导(0.14.3)的最新版本修复的。因此,我已经结束了

  originalScope.$on('$destroy', function(){
    $document.find('[id^=typeahead]').remove();
    $document.unbind('click', dismissClickHandler);
  });