2014-01-14 57 views
5

我有一個其中有兩條路線非常簡單AngularJS應用:AngularJS路徑控制器不重裝

#/search 
#/results 

當我從一個路線導航爲我預料其他一切正常。獲取所需的任何資源並完美顯示內容。

問題是,當我從一條路線導航到相同的路線(即,#/結果到#/結果)時,絕對沒有任何反應。我從瀏覽器的角度理解沒有發生任何事情,但我真的很喜歡AngularJS重新加載內容。

這一定很容易,但我在這件事上留下空白。有人可以幫我解釋一下嗎?

感謝,

喬恩

+0

你知道,如果你重新加載你的頁面,你的角應用程序將重新啓動? –

+0

控制器應該再次運行,您如何獲取數據? –

+0

等待,你的意思就像你剛剛進入地址欄並點擊進入?或者你真的清爽?或者實際上改變了路徑? –

回答

14

當您導航到同一個頁面,瀏覽器忽略它。
Angular.js與<a href="">的默認行爲無關。

你可以做什麼,是創建一個自定義的指令其中:

  • 使用$route.reload()重新加載當前視圖(路線)。
  • 使用$location.path(newPath)導航到其他視圖。

我做了example

app.directive('xref',function($route, $location){ 
    return { 
    link: function(scope, elm,attr){ 
     elm.on('click',function(){ 
     if ($location.path() === attr.xref) { 
      $route.reload(); 
     } else { 
      scope.$apply(function(){ 
      $location.path(attr.xref); 
      }); 
     }  
     }); 
    } 
    }; 
}); 

在你看來只是創建:

<a xref="/">Home</a> 
<a xref="/links">Links</a> 
+1

我最終使用這個簡單的指令來代替。好棒。謝謝 – Jonno

3

你可以檢查當前的路線是一樣的 「目的地」 的路線,並呼籲$routereload()方法:

重裝( )
導致$ route service重新加載當前路由,即使$ location沒有改變。
因此,ngView創建新的範圍,重新實例化控制器。


例如爲:

在HTML:

<a href="" ng-click="toResults()">Results</a> 

在控制器:

// ...first have `$location` and `$route` injected... 
$scope.toResults = function() { 
    var dstPath = '/results'; 
    if ($location.path() === dstPath) { 
     $route.reload() ; 
    } else { 
     $location.path(dstPath); 
    } 
} 
+0

非常感謝。這正是我要做的。應該很容易。 – Jonno

+0

我在註銷控制器中注入了$ route,但是我得到了「[$ injector:unpr]未知提供者:$ routeProvider < - $ route < - LogoutCtrl」issue.Help me out – Anuj

+0

將ngRoute模塊作爲你的應用。你需要的一切都在文檔中。 – gkalpak

0

我用routeparams財產以及比較URL參數和它的工作就像一個魅力。如果任何人再次面臨這個問題,這裏是我如何解決它:

if ($location.path() === '/destination' && $routeParams.Name == Name) { 
       $route.reload(); 
      } 
      else { 
       $location.path('/destination').search({ Name: Name }); 
      }