亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用$ location.path但不重新加載ngView的AngularJS分頁

使用$ location.path但不重新加載ngView的AngularJS分頁

30秒到達戰場 2019-12-25 14:07:47
我的單頁應用程序加載一個主頁,并且我想顯示一系列想法。每個創意都顯示在動畫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。我希望保留當前的控制器/視圖,并且不重新加載視圖。這非常糟糕,因為重新加載視圖會導致整個Flash對象被丟棄,并且預加載器周期會再次開始。我試過聽$ routeChangeStart做一個preventDefault:$scope.$on "$routeChangeStart", (ev,next,current) ->  ev.preventDefault()$scope.$on "$routeChangeSuccess", (ev,current) ->  ev.preventDefault()但無濟于事。如果我能在更改$ location.path時想出一種重寫視圖重載的方法,那么整個事情就很麻煩了。我仍然對AngularJS感到很滿意,因此我很高興能找到有關如何構建應用程序以實現我的目標的任何指示!
查看完整描述

3 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

無需更新路徑,只需使用頁碼更新查詢參數。


設置路由以忽略查詢參數更改:


....

$routeProvider.when('/foo', {..., reloadOnSearch: false})

....

并在您的應用程序中更新$location:


...

$location.search('page', pageNumber);

...


查看完整回答
反對 回復 2019-12-25
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

從這篇博客文章:


默認情況下,所有位置更改都會經過路由過程,該過程會更新角度視圖。


但是,有一種簡單的方法可以將其短路。Angular監視位置更改(是否通過輸入位置欄,單擊鏈接或通過來設置位置來完成 $location.path())。當感知到此更改時,它將廣播事件$locationChangeSuccess,并開始路由過程。我們要做的是捕獲事件并將路由重置為以前的狀態。


function MyCtrl($route, $scope) {

    var lastRoute = $route.current;

    $scope.$on('$locationChangeSuccess', function(event) {

        $route.current = lastRoute;

    });

}


查看完整回答
反對 回復 2019-12-25
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

我的解決方案是使用$ routeChangeStart,因為它為您提供了“下一條”和“最后一條”路線,您可以比較它們而無需像$ locationChangeSuccess那樣的額外變量。


好處是能夠訪問“下一條”路徑和“最后一條”路徑上的“ params”屬性,例如next.params.yourproperty當您使用“ / property / value” URL樣式時,當然$location.url還是使用或$location.path更改URL,$location.search()這取決于“?property = value” URL樣式。


在我的情況下,我不僅將它用于此目的,而且還防止控制器未更改而更改路由:


$scope.$on('$routeChangeStart',function(e,next,last){

  if(next.$$route.controller === last.$$route.controller){

    e.preventDefault();

    $route.current = last.$$route;

    //do whatever you want in here!

  }

});

我個人覺得AngularJS應該提供一種控制它的方法,現在他們認為,每當您更改瀏覽器的位置時,您都希望更改路線。


查看完整回答
反對 回復 2019-12-25
  • 3 回答
  • 0 關注
  • 1045 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號