Javascript 角度引导Typeahead-附加到正文-卡住
当将append to body与routing结合使用时,typeahead显示卡在body上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绑定被激活,但是如果页面以前被
typeahead-append-to-body="true"
我使用了Angular seed项目和一个简单的Typeahead示例,并复制了这个问题:
- 加载页
- 选择“查看2”
- 选择“查看1”
- 在输入中键入字母字符“a”
- 观察附在车身上的typeahead显示器
- 选择view2
- 观察显示屏是否仍连接在车身上
有什么想法吗?我相信这是角度引导的一个缺陷,当其作用域被破坏时,不调用
$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);
});