Sử dụng angle-ui-router, Làm cách nào để sử dụng phương thức khác trên $ stateProvider hoặc làm cách nào để sử dụng nó?
Sử dụng angle-ui-router, Làm cách nào để sử dụng phương thức khác trên $ stateProvider hoặc làm cách nào để sử dụng nó?
Câu trả lời:
Bạn không thể chỉ sử dụng $stateProvider
.
Bạn cần nhập $urlRouterProvider
và tạo mã tương tự như:
$urlRouterProvider.otherwise('/otherwise');
Các /otherwise
url phải được xác định trên một trạng thái như bình thường:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
Xem liên kết này nơi ksperling giải thích
$stateProvider
. Sẽ ít công việc hơn nếu bạn chỉ muốn hiển thị một mẫu, nhưng không chuyển hướng. Tôi thích câu trả lời của @ juan-hernandez hơn.
otherwise
(trong trường hợp này '/otherwise'
) có phải khớp với tên của trạng thái (tham số đầu tiên đến .state
) hay giá trị cho url
tùy chọn không?
Bạn có thể $stateProvider
sử dụng cú pháp catch all ( "*path"
). Bạn chỉ cần thêm cấu hình trạng thái ở cuối danh sách của mình như sau:
$stateProvider.state("otherwise", {
url: "*path",
templateUrl: "views/error-not-found.html"
});
Tất cả các tùy chọn được giải thích trong https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters .
Điều tốt đẹp của tùy chọn này, trái ngược với $urlRouterProvider.otherwise(...)
, là bạn không bị buộc phải thay đổi vị trí.
you're not forced to a location change
:?
/this/does/not/exist
, thì URL sẽ giữ nguyên như vậy trong thanh địa chỉ. Giải pháp khác sẽ đưa bạn đến/otherwise
Bạn cũng có thể đưa $ state vào một hàm khác theo cách thủ công, sau đó bạn có thể điều hướng đến trạng thái không phải url. Điều này có lợi là trình duyệt không thay đổi thanh địa chỉ, điều này rất hữu ích để xử lý việc quay lại trang trước.
$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+'"'
});
});
Được rồi, khoảnh khắc ngớ ngẩn khi bạn nhận ra rằng câu hỏi bạn hỏi đã được trả lời trong những dòng đầu tiên của mã mẫu! Chỉ cần xem qua mã mẫu.
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 !
....
Tôi chỉ muốn nghe những câu trả lời tuyệt vời đã được cung cấp. Phiên bản mới nhất của đã @uirouter/angularjs
đánh dấu lớp UrlRouterProvider
là không được dùng nữa. Bây giờ họ khuyên bạn nên sử dụng UrlService
thay thế. Bạn có thể đạt được kết quả tương tự với sửa đổi sau:
$urlService.rules.otherwise('/defaultState');
Các phương pháp bổ sung: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html
Các tham chiếu câu trả lời được chấp nhậnangular-route
hỏi về ui-router
. Câu trả lời được chấp nhận sử dụng "nguyên khối" $routeProvider
, yêu cầu ngRoute
mô-đun (trong khi ui-router
cần ui.router
mô-đun)
Các câu trả lời đánh giá cao nhất sử dụng $stateProvider
thay vào đó, và nói điều gì đó giống như .state("otherwise", { url : '/otherwise'... })
, nhưng tôi không thể tìm thấy bất kỳ đề cập đến "khác" trong tài liệu nó liên kết . Tuy nhiên, tôi thấy điều đó $stateProvider
được đề cập trong câu trả lời này khi nó nói:
Bạn không thể chỉ sử dụng
$stateProvider
. Bạn cần tiêm$urlRouterProvider
Đó là nơi câu trả lời của tôi có thể giúp bạn. Đối với tôi, $urlRouterProvider
chỉ cần sử dụng như thế này là đủ :
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');
//...
}]);
Đề xuất của tôi phù hợp với ui-router
tài liệu , ( bản sửa đổi cụ thể này ), trong đó nó bao gồm cách sử dụng tương tự của. when(...)
(lệnh gọi hàm đầu tiên):
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');
})
$stateProvider.otherwise
, vì vậy tôi sẽ giúp tôi)