我的单页应用程序加载了一个主页,我想展示一系列想法。每个想法都显示在动画 Flash 容器中,并显示动画以在想法之间循环。
想法是使用 $http 加载的:
$scope.flash = new FlashInterface scope:$scope,location:$location
$http.get("/competition.json")
.success (data) ->
$scope.flash._init data
但是,为了从历史导航和 UX 中受益,我希望使用 $location 更新地址栏以显示每个想法的正确 url:
$location.path "/i/#{idea.code}"
$scope.$apply()
我在这里调用 $apply 是因为这个事件来自 AngularJS 上下文之外,即 Flash。我希望当前的控制器/视图保留并且视图不重新加载。这是非常糟糕的,因为重新加载视图会导致整个闪存对象被丢弃,并且预加载器循环再次开始。
我试过听 $routeChangeStart 做一个 preventDefault:
$scope.$on "$routeChangeStart", (ev,next,current) ->
ev.preventDefault()
$scope.$on "$routeChangeSuccess", (ev,current) ->
ev.preventDefault()
但无济于事。如果我能找到一种在更改 $location.path 时覆盖视图重新加载的方法,那么整个事情就会变得很糟糕。
我仍然非常喜欢 AngularJS,所以我很高兴有任何关于如何构建应用程序以实现我的目标的指示!