การใช้ angular-ui-router ฉันจะใช้วิธีอื่นบน$ stateProvider ได้อย่างไรหรือฉันจะใช้มันได้อย่างไร
การใช้ angular-ui-router ฉันจะใช้วิธีอื่นบน$ stateProvider ได้อย่างไรหรือฉันจะใช้มันได้อย่างไร
คำตอบ:
$stateProviderคุณไม่สามารถใช้เพียง
คุณต้องฉีด$urlRouterProviderและสร้างรหัสที่คล้ายกับ:
$urlRouterProvider.otherwise('/otherwise');
/otherwiseURL จะต้องกำหนดไว้ในรัฐตามปกติ:
$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ทั้งหมดดังนั้นจะช่วยฉันได้)