Переспрямування за допомогою AngularJS


86

Я намагаюся перенаправити на інший маршрут, використовуючи:

$location.path("/route");

Але чомусь це не працює. Я зробив віджет для автозаповнення за допомогою jQuery-UI, і я викликаю функцію з області, як тільки користувач вибере варіант. Я налагодив його, і він входить у функцію, але ніколи не перенаправляється на інший маршрут. Це змінює маршрут, лише коли я натискаю клавішу.

Я думаю, це якось дивно, але я не зрозумів, як це вирішити. я використав

window.location = "#/route";

і це працює, але я хочу використовувати path()функцію.

Хтось уявляє, чому це відбувається?

Відповіді:


109

На прикладі непрацюючого коду буде легко відповісти на це запитання, але з цією інформацією найкраще, що я думаю, це те, що ви викликаєте $ location.path поза дайджестом AngularJS.

Спробуйте зробити це за директивою scope.$apply(function() { $location.path("/route"); });


Щиро дякую та вибачте, що не опублікував непрацюючий приклад. Але це було те, що потрібно було моєму коду.
Томарто

23
Будь-яка ідея, як змусити це працювати в методі .success усередині запиту $ http? @Tomarto
Nicholas Kreidberg

2
на консолі firefox (30 ~) запускає помилку, що цикл $ apply зайнятий
svarog

1
Як це має працювати? Я отримую таку помилку: Помилка: [$ rootScope: inprog] $ застосовувати вже виконуються помилки.angularjs.org/ 1.2.15/ $rootScope/inprog? p0 =% 24apply at angular.js: 78 ..... отже, він не працює як windows.location = '' ..
Вайбхав

1
У @NicholasKreidberg було те саме запитання і просто додавання $ scope. $ Apply (); відразу після $ location.path ("/ route"); працював у мене.
Ернесто Аллелі


20

Припустивши, що ви не використовуєте маршрутизацію html5, спробуйте $location.path("route"). Це перенаправить ваш браузер на той, #/routeякий може бути тим, що ви хочете.


15

Якщо вам потрібно переспрямувати з вашої кутової програми, використовуйте $window.location. Це була моя справа; сподіваємось, комусь це буде корисно.


2

Перевірте свій спосіб маршрутизації:

якщо ваш стан маршрутизації такий

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

тоді вам слід використовувати

$location.path("/app/register");

0

Важко сказати, не знаючи свого коду. Я найкраще припускаю, що onchangeподія не запускається, коли ви змінюєте значення текстового поля із коду JavaScript.

Існує два шляхи для роботи; перший - дзвонитиonchange самостійно, а другий - почекати, поки текстове поле втратить фокус.

Перевірте це питання ; те саме питання, різні рамки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.