Menggunakan angular-ui-router, Bagaimana saya bisa menggunakan metode sebaliknya di $ stateProvider atau bagaimana saya bisa menggunakannya sama sekali?
Menggunakan angular-ui-router, Bagaimana saya bisa menggunakan metode sebaliknya di $ stateProvider atau bagaimana saya bisa menggunakannya sama sekali?
Jawaban:
Anda tidak bisa hanya menggunakan $stateProvider
.
Anda perlu memasukkan $urlRouterProvider
dan membuat kode yang mirip dengan:
$urlRouterProvider.otherwise('/otherwise');
The /otherwise
url harus didefinisikan pada keadaan seperti biasa:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
Lihat tautan ini di mana ksperling menjelaskan
$stateProvider
. Ini kurang berfungsi jika Anda hanya ingin menampilkan template, tetapi tidak mengalihkan. Saya lebih suka jawaban @ juan-hernandez.
otherwise
(dalam hal ini '/otherwise'
) harus cocok dengan nama negara bagian (parameter pertama ke .state
) atau nilai untuk url
opsi?
Anda bisa dengan $stateProvider
menggunakan sintaks menangkap semua ( "*path"
). Anda hanya perlu menambahkan konfigurasi status di bagian bawah daftar Anda seperti yang berikut:
$stateProvider.state("otherwise", {
url: "*path",
templateUrl: "views/error-not-found.html"
});
Semua opsi dijelaskan di https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters .
Hal yang menyenangkan dari opsi ini, sebagai lawan $urlRouterProvider.otherwise(...)
, adalah Anda tidak dipaksa untuk mengubah lokasi.
you're not forced to a location change
?
/this/does/not/exist
, maka URL akan tetap seperti itu di bilah alamat. Solusi lain akan membawa Anda ke/otherwise
Anda juga dapat memasukkan $ state secara manual ke dalam fungsi sebaliknya, yang kemudian dapat Anda navigasikan ke status non-url. Ini memiliki keuntungan karena browser tidak mengubah bilah alamat, yang berguna untuk menangani kembali ke halaman sebelumnya.
$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+'"'
});
});
Oke, momen konyol ketika Anda menyadari bahwa pertanyaan yang Anda ajukan sudah terjawab di baris pertama kode sampel! Lihat saja kode contoh.
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 !
....
Saya hanya ingin berpadu dengan jawaban bagus yang telah disediakan. Versi terbaru @uirouter/angularjs
menandai kelas UrlRouterProvider
sebagai tidak digunakan lagi. Mereka sekarang merekomendasikan penggunaan UrlService
sebagai gantinya. Anda dapat mencapai hasil yang sama dengan modifikasi berikut:
$urlService.rules.otherwise('/defaultState');
Metode tambahan: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html
The jawaban yang diterima referensi angular-route
bertanya tentang ui-router
. Jawaban yang diterima menggunakan "monolitik" $routeProvider
, yang membutuhkan ngRoute
modul (sedangkan ui-router
membutuhkanui.router
modul)
The jawaban tertinggi dinilai menggunakan $stateProvider
sebaliknya, dan mengatakan sesuatu seperti .state("otherwise", { url : '/otherwise'... })
, tapi saya tidak dapat menemukan penyebutan "jika" dalam dokumentasi itu link . Namun, saya melihat yang $stateProvider
disebutkan dalam jawaban ini di mana dikatakan:
Anda tidak bisa hanya menggunakan
$stateProvider
. Anda perlu menyuntikkan$urlRouterProvider
Di situlah jawaban saya dapat membantu Anda. Bagi saya, cukup menggunakan $urlRouterProvider
seperti ini:
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');
//...
}]);
Saran saya konsisten dengan ui-router
dokumentasi , ( revisi khusus ini ), yang menyertakan penggunaan serupa dari file. when(...)
metode (panggilan pertama ke fungsi):
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
, jadi itu akan membantu saya)