Saya mengalami masalah dengan mengubah URL halaman setelah formulir dikirimkan.
Inilah alur aplikasi saya:
- Rute ditetapkan, URL dikenali ke beberapa halaman formulir.
- Memuat halaman, set variabel kontroler, arahan dipecat.
- Arahan formulir khusus dipecat yang melakukan pengiriman formulir khusus menggunakan AJAX.
- Setelah AJAX dilakukan (Angular tidak menangani AJAX) maka panggilan balik dipecat dan arahan memanggil
$scope.onAfterSubmit
fungsi yang mengatur lokasi.
Masalahnya adalah bahwa setelah mengatur lokasi, tidak ada yang terjadi. Saya sudah mencoba mengatur param lokasi /
juga ... Tidak. Saya juga sudah mencoba tidak mengirimkan formulir. Tidak ada yang berhasil.
Saya telah diuji untuk melihat apakah kode tersebut mencapai onAfterSubmit
fungsi (yang berfungsi).
Satu-satunya pemikiran saya adalah bahwa entah bagaimana ruang lingkup fungsi diubah (sejak dipanggil dari direktif), tetapi sekali lagi bagaimana ia bisa memanggil onAfterSubmit
jika ruang lingkup berubah?
Ini kode saya
var Ctrl = function($scope, $location, $http) {
$http.get('/resources/' + $params.id + '/edit.json').success(function(data) {
$scope.resource = data;
});
$scope.onAfterSubmit = function() {
$location.path('/').replace();
};
}
Ctrl.$inject = ['$scope','$location','$http'];
Bisakah seseorang membantu saya?
Jawaban:
Saya memiliki masalah serupa beberapa hari yang lalu. Dalam kasus saya masalahnya adalah bahwa saya mengubah hal-hal dengan perpustakaan pihak ke-3 (jQuery tepatnya) dan dalam hal ini meskipun fungsi panggilan dan pengaturan variabel bekerja Angular tidak selalu mengenali bahwa ada perubahan sehingga tidak pernah dicerna.
Coba gunakan
$scope.$apply()
segera setelah Anda mengubah lokasi dan meneleponreplace()
untuk memberi tahu Angular bahwa segalanya telah berubah.sumber
Alih-alih
$location.path(...)
mengubah atau menyegarkan halaman, saya menggunakan layanan ini$window
. Di Angular layanan ini digunakan sebagai antarmuka kewindow
objek, danwindow
objek tersebut berisi propertilocation
yang memungkinkan Anda untuk menangani operasi yang terkait dengan hal-hal lokasi atau URL.Misalnya, dengan
window.location
Anda dapat menetapkan halaman baru, seperti ini:Atau segarkan, seperti ini:
Ini berhasil untuk saya. Ini sedikit berbeda dari yang Anda harapkan tetapi bekerja untuk tujuan yang diberikan.
sumber
Saya memiliki masalah yang sama, tetapi panggilan saya ke $ location SUDAH dalam intisari. Memanggil $ apply () baru saja memberikan $ digest sudah dalam kesalahan proses.
Trik ini berhasil (dan pastikan untuk menyuntikkan
$location
ke controller Anda):Meskipun tidak tahu mengapa ini perlu ...
sumber
Saya harus menyematkan
$location.path()
pernyataan saya seperti ini karena intisari saya masih berjalan:sumber
Dalam kasus saya, masalahnya adalah indikator parameter opsional ('?') Hilang dalam konfigurasi template saya.
Sebagai contoh:
Tanpa karakter interogasi rute jelas tidak akan berubah menekan parameter rute.
sumber
Jika ada di antara Anda yang menggunakan router Angular-ui / ui, gunakan:
$state.go('yourstate')
sebagai ganti$location
. Itu berhasil bagi saya.sumber
Ini bekerja untuk saya (dalam CoffeeScript)
sumber
Menurut pendapat saya, banyak jawaban di sini tampaknya sedikit macet (misalnya $ apply () atau $ timeout), karena bermain-main dengan $ apply () dapat menyebabkan kesalahan yang tidak diinginkan.
Biasanya, ketika $ location tidak berfungsi itu berarti ada sesuatu yang tidak diimplementasikan secara angular.
Dalam pertanyaan khusus ini, masalahnya tampaknya di bagian AJAX non-sudut. Saya punya masalah serupa, di mana pengalihan menggunakan $ lokasi harus dilakukan setelah janji terselesaikan. Saya ingin menggambarkan masalah pada contoh ini.
Kode lama:
Catatan: taskService.createTask mengembalikan janji.
$ q - cara sudut untuk menggunakan janji:
Menggunakan $ q untuk menyelesaikan janji memecahkan masalah pengalihan.
Lebih lanjut tentang layanan $ q: https://docs.angularjs.org/api/ng/service/ $ q
sumber
itu harus menyelesaikan masalah Anda.
sumber