2015-04-27 51 views
0

我有4個狀態,每個狀態代表不同的可視化。第一個可視化是一張地圖,第二個到第四個是餅圖。角度:狀態變化在第二次點擊時丟失了URL

默認值是地圖可視化。我有三個圖標總是顯示其他3種可能的可視化。

每個狀態實際上是一個嵌套狀態。第一個狀態是「root.map」,那麼我們有「root.vis1」,「root.vis2」和「root.vis3」。

當我最初加載默認的「root.map」可視化時,一切都很好。然後我點擊一個圖標,一切正常,可視化改變。例如,瀏覽器中的URL變爲「localhost:3000/#/root/vis2」。但是當我再次點擊時,儘管可視化正確地更改爲所選內容,但我在瀏覽器中放鬆了路徑,並且它變爲「localhost:3000/#」。

這可能是什麼原因造成的?我希望瀏覽器中的網址始終反映當前的網址(因此它可以被設爲書籤或共享)。

國家提供的配置:

$stateProvider 
    .state('home', { 
     url: "/home", 
     templateUrl: "views/home.html",  
    }) 
    .state('root', { 
     abstract: true, 
     url: "/root", 
     cache: false, 
     templateUrl: "views/root.html" 
    }) 
    .state('root.map', { 
     url: "/map", 
     cache: false, 
     templateUrl: "views/map.html", 
     resolve: { 
      //some resolve code 
     } 
    }) 
.state('root.vis1', { 
     url: "/vis1", 
     cache: false, 
     templateUrl: "views/vis.html" 
    }) 
    .state('root.vis2', { 
     url: "/vis2", 
     cache: false, 
     templateUrl: "views/vis.html" 
    }) 
    .state('root.vis3', { 
     url: "/vis3", 
     cache: false, 
     templateUrl: "views/vis.html" 
     }); 
    } 

的圖標:

<a class="inline vis-icons" href="#" ng-click="set_visualization('vis2');"><i class="fa fa-map-marker"></i></a> 

set_visualization功能控制器:

$scope.set_visualization = function(visualization) { 
    $scope.current_vis = visualization; 
    $state.transitionTo('root.' + visualization); 
    return false; 
    } 
+0

做其他環節(如,到'vis1',等...)有'HREF = 「#」'在其中?如果你先去'vis2'然後回到'vis1',你會得到同樣的行爲嗎? – Tom

+0

爲什麼你使用'$ state.TransitionTo'而不是'$ state.go'? – Claies

+1

不使用'href =「#」'沒有'event.preventDefault()' – charlietfl

回答

1

將其更改爲:

<a class="inline vis-icons" href="" ng-click="set_visualization('vis2');"> 

或者

<a class="inline vis-icons" ng-click="set_visualization('vis2');"> 

參見: href overrides ng-click in Angular.js