2013-11-30 2 views
0

В AngularJS У меня есть служба с методом, используемым для возврата одного сообщения из API. Он создан как таковой ...Обновление информации в AngularJS при изменении URL (без обновления)

.factory('Posts', ['$resource', '$routeParams', 

    function($resource, $routeParams){ 

     return $resource('/api/posts/', {}, { 
       single: { 
        url: '/api/posts/' + $routeParams.post_id, 
        method:'GET', 
       } 

    }); 

}]) 

У меня есть поставщик маршрут создан для просмотра одиночных сообщения на URL-адрес:/#/р/14

Это работает правильно, когда я впервые на землю но если я затем изменил номер в конце, ничего не произойдет до тех пор, пока не обновится. Поскольку URL-адрес имеет #, я понимаю, почему это не так, как решить проблему. Кажется, я ничего не могу найти в Гугле. Надеюсь, кто-то может помочь!

+0

как вы меняете номер? Если вы имеете в виду, что изменение вручную в адресной строке браузера не знает, когда вы закончили набирать/редактировать URL-адрес до тех пор, пока не нажмете на обновление ... не следует загружать страницу с сервера, хотя если только изменить хеш – charlietfl

+0

На данный момент это чисто набирается адресная строка и нажатие введите. Если я это сделаю, это совсем не реагирует, но если я удалю обновление после этого, он обновит содержимое. Я ожидал, что AngularJS заметит изменения и обновит область действия, но я предполагаю, что мне нужно сделать что-то еще? – Leonard

+0

попробует сыграть с демо на угловом сайте или в любом другом угловом приложении и посмотреть, возникает ли такая же проблема в браузере, который вы используете. Трудно помочь, не имея возможности реплицировать ... http: //angular.github.io/angular-phonecat/step-12/app/#/phones. – charlietfl

ответ

1

Спасибо за помощь в комментариях к оригиналу сообщения. Это поставило меня на правильный путь, чтобы диагностировать проблему. Это была небольшая ошибка новобранец, которую я объясню ниже для тех, кто может найти то же самое.

Проблема заключалась в том, как я установил свой контроллер и службу, чтобы нарисовать идентификатор сообщения из URL-адреса. В соответствии с исходным сообщением вы можете видеть, что я вызывал параметр URL на заводе, используя $ routeParams.post_id. Добавление переменной до конца, как это не правильный способ сделать это, это на самом деле, согласно ниже:

.factory('Posts', ['$resource', '$routeParams', 
    function($resource){ 
     return $resource('/api/posts/', {}, { 
       single: { 
        url: '/api/posts/:post_id', 
        method:'GET', 
       } 
    }); 
}]) 

я попробовал это первоначально, но это не похоже на работу, пересматривают проблему и просматривая ссылку на код кода, представленную в комментариях, я понял, что ошибся в назначении параметров в своем вызове от контроллера.

проблематичен:

Posts.single({}, function(response){ 
    $scope.post = response ; 
}); 

Рабочая:

Posts.single({ post_id: $routeParams.post_id }, function(response){ 
    $scope.post = response ; 
}); 

Я не понял, эти параметры будут использоваться, чтобы связать эту информацию, я думал, что они использовались исключительно для получения информации о заводе запрос.

Как только я отсортировал эти вещи, это не сработало!

TL; DR

Это очень плохой способ использовать $ routeParams на заводе, передать его с контроллера.

url: '/api/posts/' + $routeParams.post_id, 
Смежные вопросы