การใช้ angular-ui-router ฉันจะใช้วิธีอื่นบน$ stateProvider ได้อย่างไรหรือฉันจะใช้มันได้อย่างไร
การใช้ angular-ui-router ฉันจะใช้วิธีอื่นบน$ stateProvider ได้อย่างไรหรือฉันจะใช้มันได้อย่างไร
คำตอบ:
$stateProvider
คุณไม่สามารถใช้เพียง
คุณต้องฉีด$urlRouterProvider
และสร้างรหัสที่คล้ายกับ:
$urlRouterProvider.otherwise('/otherwise');
/otherwise
URL จะต้องกำหนดไว้ในรัฐตามปกติ:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
ดูลิงค์นี้ที่ksperling อธิบาย
$stateProvider
. ใช้งานน้อยลงหากคุณต้องการแสดงเทมเพลต แต่ไม่เปลี่ยนเส้นทาง ฉันชอบคำตอบของ @ juan-hernandez
otherwise
(ในกรณีนี้'/otherwise'
) ต้องตรงกับชื่อของรัฐ (พารามิเตอร์แรกถึง.state
) หรือค่าสำหรับurl
ตัวเลือกหรือไม่
คุณสามารถ$stateProvider
ใช้ไวยากรณ์ catch all ( "*path"
) คุณเพียงแค่ต้องเพิ่มการกำหนดค่าสถานะที่ด้านล่างของรายการของคุณดังต่อไปนี้:
$stateProvider.state("otherwise", {
url: "*path",
templateUrl: "views/error-not-found.html"
});
ตัวเลือกทั้งหมดมีอธิบายไว้ในhttps://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters
สิ่งที่ดีของตัวเลือกนี้ตรงข้าม$urlRouterProvider.otherwise(...)
คือคุณไม่ถูกบังคับให้เปลี่ยนสถานที่
you're not forced to a location change
ไหม: ?
/this/does/not/exist
ที่ URL ก็จะยังคงอยู่ในแถบที่อยู่ ทางออกอื่นจะนำคุณไปที่/otherwise
คุณยังสามารถฉีด $ 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+'"'
});
});
ฉันแค่อยากจะพูดถึงคำตอบที่ดีที่มีให้แล้ว เวอร์ชันล่าสุดของ@uirouter/angularjs
ทำเครื่องหมายชั้นเรียนUrlRouterProvider
ว่าเลิกใช้งานแล้ว ตอนนี้พวกเขาแนะนำให้ใช้UrlService
แทน คุณสามารถบรรลุผลลัพธ์เดียวกันได้ด้วยการปรับเปลี่ยนต่อไปนี้:
$urlService.rules.otherwise('/defaultState');
วิธีการเพิ่มเติม: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html
โอเคช่วงเวลาที่โง่เขลาเมื่อคุณรู้ว่าคำถามที่คุณถามนั้นได้รับคำตอบแล้วในบรรทัดแรกของโค้ดตัวอย่าง! เพียงแค่ดูโค้ดตัวอย่าง
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 !
....
คำตอบที่ได้รับการยอมรับอ้างอิงถามเกี่ยวกับangular-route
ui-router
คำตอบที่ยอมรับใช้"เสาหิน" $routeProvider
ซึ่งต้องใช้ngRoute
โมดูล (ในขณะที่ui-router
ต้องการui.router
โมดูล)
คำตอบอันดับสูงสุดใช้$stateProvider
แทนและกล่าวว่าสิ่งที่ต้องการ.state("otherwise", { url : '/otherwise'... })
แต่ฉันไม่สามารถหาเอ่ยถึงใด ๆ ของ "มิฉะนั้น" ในเอกสารมันเชื่อมโยง อย่างไรก็ตามฉันเห็นว่า$stateProvider
มีการกล่าวถึงในคำตอบนี้โดยระบุว่า:
$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
เอกสาร ( การแก้ไขเฉพาะนี้ ) ซึ่งรวมถึงการใช้ไฟล์. 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');
})
$stateProvider.otherwise
ทั้งหมดดังนั้นจะช่วยฉันได้)