Saya ingin dapat bertransisi ke suatu keadaan dan melewatkan objek sewenang-wenang menggunakan ui-router.
Saya biasanya menyadarinya $stateParams
digunakan, tetapi saya yakin nilai ini dimasukkan ke dalam URL, dan saya tidak ingin pengguna dapat menandai data ini.
Saya ingin melakukan sesuatu seperti ini.
$state.transitionTo('newState', {myObj: {foo: 'bar'}});
function myCtrl($stateParams) {
console.log($stateParams.myObj); // -> {foo: 'bar'}
};
Apakah ada cara untuk melakukan ini tanpa mengkodekan nilai ke dalam URL?
Jawaban:
Di versi 0.2.13, Anda harus bisa meneruskan objek ke $ state.go,
lalu akses parameter di pengontrol Anda.
myParam tidak akan muncul di URL.
Sumber:
Lihat komentar oleh christopherthielen https://github.com/angular-ui/ui-router/issues/983 , direproduksi di sini untuk kenyamanan:
sumber
transitionTo
baik.[object Object]
$stateProvider.state('myState', { url: '/myState/{myParam:json}', params: {myParam: null},...
Lihat catatan rilis 0.2.13 dan komentar kode untuk fitur ini.{ url: '/mystate/{id:[0-9]+}', params: { id: null, myParam: null }, ...
Ada dua bagian dari masalah ini
1) menggunakan parameter yang tidak akan mengubah url (menggunakan properti params):
2) melewatkan objek sebagai parameter: Nah, tidak ada cara langsung bagaimana melakukannya sekarang, karena setiap parameter diubah menjadi string ( EDIT : sejak 0.2.13, ini tidak lagi benar - Anda dapat menggunakan objek secara langsung), tetapi Anda dapat mengatasinya dengan membuat string sendiri
dan pada pengontrol target deserialisasi objek lagi
sumber
Sebenarnya Anda bisa melakukan ini.
Ini adalah dokumentasi resmi tentang opsi di state.go
Semuanya dijelaskan di sana dan seperti yang Anda lihat, inilah cara untuk melakukannya.
sumber
Btw Anda juga dapat menggunakan atribut ui-sref di template Anda untuk mengirimkan objek
sumber
1)
2)
sumber
Tidak, URL akan selalu diperbarui saat parameter diteruskan ke
transitionTo
.Ini terjadi pada state.js: 698 di ui-router .
sumber