2

我正在嘗試製作類似Facebook的模態窗口 - 例如,您單擊圖像,它會在模式窗口中打開並且URL從/更改爲/img/dj27s_D,而不會重新渲染視圖, modal的url可以追溯到/沒有執行路線提供角度更改網址

我想通了,使用

var stateObj = { foo: "bar" }; 
history.pushState(stateObj, "page 2", "bar.html"); 

只會崩潰在下$digest應用。我也試過

$location.path = ''; 

但沒有任何反應。如果我執行

$location.path('/img/id') 

$ routeProvider將啓動並更改視圖。我不希望發生這種情況,只是想在模式打開時暫時更改網址。

回答

0

我建議你看看Angular UI-Router。你可以用嵌套的狀態/嵌套視圖來描述你所描述的內部視圖彈出模態。您可以根據需要配置每個狀態的URL。

編輯:可能有一種方法不使用UI-Router,但我沒有這樣做。也許this other SO question與你有關。在父模板

$stateProvider.state('site', { 
    url: "", 
    templateUrl: 'app/parent.tpl.html', 
    controller: 'ParentCtrl' 
}); 

$stateProvider.state('site.child', { 
    url: "/child", 
    templateUrl: 'app/child.tpl.html', 
    controller: 'ChildCtrl' 
}); 

然後,把這種類型的div:

UI路由器與嵌套視圖一個簡單的部分示例,你把這個在您的控制器

<div ui-view></div> 

這將是子模板將在父模板內加載的位置。在子模板中,您可以嘗試模態對話框。

+0

有沒有沒有UI路由器的解決方案?如果不是,請提供一個簡單的例子。 – Deepsy

+0

這裏有一些例子可以幫助你:http://stackoverflow.com/a/22116618/675065 – Alp

+0

事情是,我的目標是改變網址,所以當你按刷新或複製/粘貼鏈接地址酒吧,你會被重定向到實際的頁面,而不是彈出窗口。我無法弄清楚如何使用UI-Router來做到這一點。 – Deepsy

1

您可以設置路由器使用以前的路由。例如這種方式在你的控制器:

lastRoute = $route.current; 
$scope.$on('$locationChangeSuccess', function (e) { 
    if (window.location.href.match(/\/view/) || window.location.href === '/') { 
    $route.current = lastRoute; 
    } 
}); 

$route.current不會改變,刷新整個頁面不會被觸發。你可能希望做一些正則表達式檢查來保持你的URL空間整潔以防止刷新,但這是一個小的代價。

+0

謝謝!這正是我需要的:)! – iMacTia