【发布时间】:2012-09-07 12:08:44
【问题描述】:
我的单页应用程序加载了一个主页,我想展示一系列想法。每个想法都显示在动画 Flash 容器中,并显示动画以在想法之间循环。
想法是使用 $http 加载的:
$scope.flash = new FlashInterface scope:$scope,location:$location
$http.get("/competition.json")
.success (data) ->
$scope.flash._init data
但是,为了从历史导航和用户体验中受益,我希望使用 $location 更新地址栏以显示每个想法的正确 url:
$location.path "/i/#{idea.code}"
$scope.$apply()
我在这里调用 $apply 是因为这个事件来自 AngularJS 上下文之外,即 Flash。我希望当前的控制器/视图保留并且视图不重新加载。这很糟糕,因为重新加载视图会导致整个 Flash 对象被丢弃,并且重新开始预加载循环。
我已经尝试监听 $routeChangeStart 来做一个 preventDefault:
$scope.$on "$routeChangeStart", (ev,next,current) ->
ev.preventDefault()
$scope.$on "$routeChangeSuccess", (ev,current) ->
ev.preventDefault()
但无济于事。如果我能找到一种在更改 $location.path 时覆盖视图重新加载的方法,那么整个事情就会变得很糟糕。
我仍然非常熟悉 AngularJS,所以我很高兴有任何关于如何构建应用程序以实现我的目标的指示!
【问题讨论】:
-
我迟到了,但我刚刚遇到了类似的问题。您是否有理由不能将
ideas放在ng-view指令之外并给它们自己的控制器,该控制器通过范围继承与ng-view内的控制器交互?我主要是问,因为这是我解决自己问题的方法,我想知道它是否有任何缺点,或者我是否应该切换到接受的答案。 -
如果我今天再次解决这个问题,我会很想使用具有分层视图功能的 ui-router。我不确定这是否能解决我在这里遇到的特定 URL 问题,需要更多研究一段时间......!
-
好的,感谢您为我指明方向,感谢您回复这么晚的评论!