Alihkan menggunakan AngularJS

86

Saya mencoba untuk mengalihkan ke rute lain menggunakan:

$location.path("/route");

Tetapi untuk beberapa alasan itu tidak berhasil. Saya melakukan widget pelengkapan otomatis menggunakan jQuery-UI dan saya memanggil fungsi dari ruang lingkup setelah pengguna memilih opsi. Saya men-debugnya dan itu memasuki fungsi tetapi tidak pernah dialihkan ke rute lain. Itu hanya mengubah rute ketika saya menekan sebuah tombol.

Saya pikir ini agak aneh tetapi saya belum menemukan cara untuk mengatasinya. Saya dulu

window.location = "#/route";

dan berhasil tetapi saya ingin menggunakan path()fungsinya.

Apakah ada yang tahu mengapa ini terjadi?

Tomarto
sumber

Jawaban:

109

Dengan contoh kode yang tidak berfungsi, akan mudah untuk menjawab pertanyaan ini, tetapi dengan informasi ini yang terbaik yang dapat saya pikirkan adalah Anda memanggil $ location.path di luar intisari AngularJS.

Coba lakukan ini sesuai arahan scope.$apply(function() { $location.path("/route"); });

Renan Tomal Fernandes
sumber
Terima kasih banyak dan saya minta maaf karena tidak memposting contoh yang tidak berfungsi. Tapi inilah yang dibutuhkan kode saya.
Tomarto
23
Adakah ide untuk membuatnya bekerja dalam metode .success di dalam permintaan $ http? @Tomarto
Nicholas Kreidberg
2
pada konsol firefox (30 ~) mengaktifkan kesalahan bahwa $ apply cycle is busy
svarog
1
Bagaimana cara kerjanya? Saya mendapatkan error berikut: Error: [$ rootScope: inprog] $ apply sudah dalam proses error.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply di angular.js: 78 ..... karenanya, ini tidak berfungsi sebagai windows.location = '' ..
Vaibhav
1
@NicholasKreidberg memiliki pertanyaan yang sama dan hanya menambahkan $ scope. $ Apply (); tepat setelah $ location.path ("/ route"); bekerja untuk saya.
Ernesto Allely
81

Jangan lupa untuk menyuntikkan $locationke controller.

Stepan Suvorov
sumber
2
Tangkapan yang bagus - itulah masalah bagi saya.
Jason Swett
Bagus, terima kasih telah memposting ini, yang tampaknya tidak begitu jelas.
Chuck Conway
20

Dengan asumsi Anda tidak menggunakan perutean html5, coba $location.path("route"). Ini akan mengarahkan browser Anda ke #/routemana yang Anda inginkan.

dpactri.dll
sumber
15

Jika Anda perlu mengalihkan penggunaan aplikasi sudut Anda $window.location. Itu kasus saya; semoga ada yang merasakan manfaatnya.

Raulucco
sumber
2

Periksa metode perutean Anda:

jika status perutean Anda seperti ini

 .state('app.register', {
    url: '/register',
    views: {
      'menuContent': {
        templateUrl: 'templates/register.html',
      }
    }
  }) 

maka Anda harus menggunakan

$location.path("/app/register");
jfindley.dll
sumber
0

Sulit untuk mengatakannya tanpa mengetahui kode Anda. Tebakan terbaik saya adalah bahwa onchangeperistiwa tersebut tidak diaktifkan saat Anda mengubah nilai kotak teks Anda dari kode JavaScript.

Ada dua cara agar ini berhasil; yang pertama adalah menelepon onchangeAnda sendiri, dan yang kedua adalah menunggu kotak teks kehilangan fokus.

Periksa pertanyaan ini ; masalah yang sama, kerangka kerja yang berbeda.

Milan Jaric
sumber