使用angular-ui-router,如何使用otherwise method$stateProvider或者我怎樣才能使用它?其他在StateProvider上
回答
您只能使用$stateProvider
。
你需要注入$urlRouterProvider
,並創建類似代碼:
$urlRouterProvider.otherwise('/otherwise');
的/otherwise
url必須的狀態像往常一樣被定義爲:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
看到這個鏈接,ksperling explains
我試過了,它工作!因此這是最好的答案;) – Adelin
你實際上可以使用'$ stateProvider'。如果您只想顯示模板,但不重定向,則工作量會減少。我更喜歡@ juan-hernandez的回答。 – weltschmerz
傳遞給'否則'的值(在這種情況下''/ otherwise''')必須匹配狀態的名稱(第一個參數到'.state')或'url'選項的值? – d512
好的,當你意識到你問的問題已經在示例代碼的第一行中得到了回答的時候,這個愚蠢的時刻!看看示例代碼。
angular.module('sample', ['ui.compat'])
.config(
[ '$stateProvider', '$routeProvider', '$urlRouterProvider',
function ($stateProvider, $routeProvider, $urlRouterProvider) {
$urlRouterProvider
.when('/c?id', '/contacts/:id')
.otherwise('/'); // <-- This is what I was looking for !
....
您可以使用$stateProvider
的捕獲所有的語法("*path"
)。你只需要在列表的底部添加的狀態配置類似以下:
$stateProvider.state("otherwise", {
url: "*path",
templateUrl: "views/error-not-found.html"
});
所有的選項都在https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters解釋。
與$urlRouterProvider.otherwise(...)
相比,此選項的好處在於您不必強制改變位置。
請你詳細說明一下:「你不是被迫改變位置」嗎? –
他的意思是網址將保持原樣。因此,如果用戶轉到「/ this/does/not/exist」,那麼URL將保持在地址欄中。另一種解決方案將帶你到'/否' –
我用你的解決方案,它的工作(我可以保持沒有找到的網址,這是偉大的,因爲我使用http://luisfarzati.github.io/angulartics/和這種方式,我也可以看到導航到網頁沒有找到)的情況下,用戶瀏覽的網址不存在。但是,如果我在控制器內部使用$ state.go('otherwise')導航到此URL,則會丟失該URL。當用戶轉到項目的詳細信息頁面並且服務器返回404時(例如,如果該項目被刪除),我明確導航到此狀態。你知道解決這個問題的方法嗎? – pcatre
您也可以手動將$ state插入到其他函數中,然後您可以導航到非url狀態。這有利於瀏覽器不更改地址欄,這有助於處理回到上一頁。
$urlRouterProvider.otherwise(function ($injector, $location) {
var $state = $injector.get('$state');
$state.go('defaultLayout.error', {
title: "Page not found",
message: 'Could not find a state associated with url "'+$location.$$url+'"'
});
});
的accepted answer引用angular-route
詢問ui-router
。該接受的答案使用"monolithic"$routeProvider
,這就要求ngRoute
模塊(而ui-router
需要ui.router
模塊)
的highest-rated answer使用$stateProvider
代替,並說像.state("otherwise", { url : '/otherwise'... })
, 但我找不到任何提及「否則」在documentation it links。但是,我看到它說,$stateProvider
提到in this answer:
你不僅可以使用
$stateProvider
。您需要注入$urlRouterProvider
這就是我的答案可能對您有幫助的地方。對我來說,這是足夠使用$urlRouterProvider
就像這樣:
my_module
.config([
, '$urlRouterProvider'
, function(
, $urlRouterProvider){
//When the url is empty; i.e. what I consider to be "the default"
//Then send the user to whatever state is served at the URL '/starting'
//(It could say '/default' or any other path you want)
$urlRouterProvider
.when('', '/starting');
//...
}]);
我的建議是與ui-router
documentation,(this specific revision),它包括一個類似用途的一致。when(...)
方法(第一次調用函數):
app.config(function($urlRouterProvider){
// when there is an empty route, redirect to /index
$urlRouterProvider.when('', '/index');
// You can also use regex for the match parameter
$urlRouterProvider.when(/aspx/i, '/index');
})
- 1. StateProvider在AngularJS的其他地方比app.js
- 2. stateprovider在手機
- 3. app.config + stateProvider
- 4. 在其他平臺上
- 5. wakanda angular $ urlRouterProvider stateProvider
- 6. $ stateprovider multiple routes angularjs
- 7. AngularJS $ stateProvider速記
- 8. $ stateProvider不工作
- 9. 添加$ stateProvider
- 10. 到$ routeProvider或$ stateProvider
- 11. blogspot.com上其他域
- 12. 渲染基礎上,決心$ stateProvider模板
- 13. IE8和$ stateProvider問題
- 14. $ stateProvider angularJs不工作
- 15. $ stateProvider params null with ionic
- 16. 在UWAMP上安裝ffmpeg和其他人
- 17. 在其他窗口之上的窗口
- 18. 子元素在其他元素之上
- 19. 在OSX上運行其他java版本
- 20. 在其他服務器上運行mysqlbinlog
- 21. 在AWS上編譯其他語言Lambda
- 22. Jar在其他PC上無法運行
- 23. 在其他虛擬機上請求API
- 24. HTML5(或其他)在窗口上M3U8
- 25. 在其他電腦上運行Allegro 5
- 26. NSTextFields在其他Mac上位置較低
- 27. 在其他課上更改tkinter標籤?
- 28. php在其他頁面上取值
- 29. .bind animationend在其他函數上運行
- 30. EAGLView在其他視圖上的性能
你想要做什麼? (請注意,我不完全理解'$ stateProvider.otherwise',所以它會幫助我) –