Saat ini proyek kami menggunakan default $routeProvider
, dan saya menggunakan "retasan" ini, untuk berubah url
tanpa memuat ulang halaman:
services.service('$locationEx', ['$location', '$route', '$rootScope', function($location, $route, $rootScope) {
$location.skipReload = function () {
var lastRoute = $route.current;
var un = $rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
un();
});
return $location;
};
return $location;
}]);
dan masuk controller
$locationEx.skipReload().path("/category/" + $scope.model.id).replace();
Saya sedang berpikir untuk mengganti routeProvider
dengan ui-router
untuk rute bersarang, tetapi tidak dapat menemukan di ini ui-router
.
Apakah mungkin - melakukan hal yang sama angular-ui-router
?
Mengapa saya membutuhkan ini? Izinkan saya menjelaskan dengan sebuah contoh:
Rute untuk membuat kategori baru /category/new
setelah clicking
pada SAVE I show success-alert
dan saya ingin mengubah rute /category/new
ke /caterogy/23
(23 - adalah id dari item baru yang disimpan dalam db)
angularjs
angular-ui-router
vuliad
sumber
sumber
$urlRouterProvider.otherwise
tampaknya beroperasi pada URL, bukan negara. Hmmm, mungkin saya bisa hidup dengan 2 URL, atau menemukan cara lain untuk menunjukkan bahwa itu adalah URL yang tidak valid.Jawaban:
Cukup Anda bisa menggunakan
$state.transitionTo
bukan$state.go
.$state.go
panggilan secara$state.transitionTo
internal tetapi secara otomatis mengatur opsi{ location: true, inherit: true, relative: $state.$current, notify: true }
. Anda dapat menelepon$state.transitionTo
dan mengaturnotify: false
. Sebagai contoh:dapat digantikan oleh
Sunting: Seperti yang disarankan oleh fracz itu bisa saja:
sumber
$state.transitionTo('.detail', {id: newId}, { location: true, inherit: true, relative: $state.$current, notify: false })
jadi pada dasarnya set notify ke false dan location to true$state.go('.detail', {id: newId}, {notify: false})
.Oke, terpecahkan :) Router UI Sudut memiliki metode baru ini, $ urlRouterProvider.deferIntercept () https://github.com/angular-ui/ui-router/issues/64
pada dasarnya turun ke ini:
Saya pikir metode ini saat ini hanya termasuk dalam versi master dari router ui sudut, yang dengan parameter opsional (yang bagus juga, btw). Itu perlu dikloning dan dibangun dari sumber dengan
Dokumen juga dapat diakses dari sumbernya, melalui
(mereka dibangun ke direktori / situs) // info lebih lanjut di README.MD
Tampaknya ada cara lain untuk melakukan ini, dengan parameter dinamis (yang saya belum pernah gunakan). Banyak kredit untuk nateabele.
Sebagai sidenote, berikut adalah parameter opsional di $ stateProvider Angular UI Router, yang saya gunakan dalam kombinasi dengan yang di atas:
apa yang dilakukan adalah memungkinkan untuk menyelesaikan suatu keadaan, bahkan jika salah satu params hilang. SEO adalah satu tujuan, keterbacaan yang lain.
Dalam contoh di atas, saya ingin doorsSingle menjadi parameter yang diperlukan. Tidak jelas bagaimana mendefinisikannya. Ini berfungsi ok dengan beberapa parameter opsional, jadi tidak terlalu masalah. Diskusi ada di sini https://github.com/angular-ui/ui-router/pull/1032#issuecomment-49196090
sumber
Error: Both params and url specicified in state 'state'
. Dikatakan dalam dokumen bahwa ini adalah penggunaan yang tidak benar juga. Agak mengecewakan.Setelah menghabiskan banyak waktu dengan masalah ini, Inilah yang saya dapatkan
sumber
ui-router
hanya ditanyakan , bagaimana Anda bisa mengatakan itu, solusi lain bekerja$routerProvider
,$routeProvider
&$stateProvider
sangat berbeda dalam arsitektur ..$onInit()
dipanggil pada komponen saya setiap kali saya menggunakan$state.go
. Sepertinya tidak 100% baik untuk saya.Panggilan
masih akan memuat ulang controller.
Untuk menghindarinya, Anda harus mendeklarasikan parameter sebagai dinamis:
Maka Anda bahkan tidak perlu
notify
, hanya meneleponcukup. Neato!
Dari dokumentasi :
sumber
Pengaturan ini memecahkan masalah berikut untuk saya:
.../
ke.../123
Konfigurasi keadaan
Meminta status (dari pengontrol lain)
Pengendali Pelatihan
sumber
Jika Anda hanya perlu mengubah url tetapi mencegah perubahan status:
Ubah lokasi dengan (tambahkan. Ganti jika Anda ingin mengganti dalam riwayat):
Cegah pengalihan ke negara Anda:
sumber
saya melakukan ini tetapi dahulu di versi: v0.2.10 UI-router seperti ini ::
sumber
Coba sesuatu seperti ini
sumber
Saya tidak berpikir Anda perlu ui-router sama sekali untuk ini. Dokumentasi yang tersedia untuk layanan $ location mengatakan pada paragraf pertama, "... perubahan ke $ location dicerminkan ke dalam bilah alamat browser." Kemudian berlanjut untuk berkata, "Apa yang tidak dilakukannya? Itu tidak menyebabkan satu halaman penuh dimuat kembali ketika URL browser diubah."
Jadi, dengan itu dalam pikiran, mengapa tidak hanya mengubah $ location.path (karena metode ini adalah pengambil dan penyetel) dengan sesuatu seperti berikut:
The dokumentasi catatan bahwa jalan harus selalu dimulai dengan garis miring, tapi ini akan menambahkannya jika itu hilang.
sumber
ui-router
, dan menggunakan$location.path(URL_PATH)
, halaman itu secara otomatis merender ulang ?!