如何在路由更改时阻止AngularJs在dom上拥有旧视图和新视图

时间:2014-01-03 01:38:53

标签: angularjs

我正在使用一个指令“slideable”,它创建一个滑出区域并有一个切换。这段代码不是我写的,但它对我来说是一个更大的问题。当我更改视图(最常见的是/ user /:id类型)时,slideable是模板上使用的指令。该指令在其链接函数期间搜索元素并绑定click事件。问题是当我正在更改路由并且正在加载新视图(相同类型但不同的id)时,该指令将重新绑定到旧视图。如果我在链接期间停止使用chrome浏览器,那么我将在dom上看到两个ng-views,问题是它与正在离开的那个绑定。

我还有其他与此现象有关的问题。在制定新视图时,旧视图仍然在dom上是否正常?为什么在渲染新视图之前不会销毁旧视图?如何在这样的指令中解决这个问题?

感谢。

我希望从概念上理解发生了什么。我已经修改了指令以选择最新的视图并适当地搜索并绑定到正确的元素。但我有点困惑的是为什么会有一个两者共存的状态。

1 个答案:

答案 0 :(得分:1)

旧HTML片段与新片段短暂出现的一个明确原因是支持从旧片段到新片段的过渡动画。 Take a look at the ngView documentation并且您会看到一个动画过渡的示例,并且很清楚这不是错误或设计缺陷。

通常当某人遇到绑定到正确元素或元素事件的问题时,它是因为他们选择元素而不将选择器的范围限制为添加或更新的HTML片段,或者试图在指令之外定位DOM的部分。这是第一个检查的地方,该指令正在做正确的事情,但就像我说的那样,我们需要代码来检查它。