2013-06-18 4 views
7

Я пытаюсь обновить $location.path в рамках директивы AngularJS. Он не работает, как я ожидаю, это обновление URL-адреса, отображаемого в окне браузера, и отображение другого содержимого на моей странице. Мои функции определенно получаются с правильными значениями, как показано на консоли. Я думаю, что $location.path может иметь какой-то эффект, потому что, когда я нажимаю на ссылку, вызываются некоторые дополнительные функции, которые будут вызываться на новой странице, только новая страница никогда не отображается. Когда я использую $location.path в контроллере, он работает так, как ожидалось, но не в моей директиве.

Вот HTML для моей директивы:

<div detail-link="/comments?post={{post.postId}}" ng-click="clickDetailLink()"></div> 

Вот определение этой директивы (в CoffeeScript):

directives.directive 'detailLink', ['$location', ($location) -> 
    return (scope, element, attrs) -> 
     scope.clickDetailLink = -> 
      console.log "loading " + scope.detailLinkHref 
      $location.path scope.detailLinkHref 

     attrs.$observe 'detailLink', (value) -> 
      console.log "set detail link to " + value 
      scope.detailLinkHref = value 
] 

У меня есть ключ, что здесь происходит ... мой $routeProvider установлен для обработки /comments, но здесь я пытаюсь добавить строку запроса к маршруту. Если я использую обычный <a href="#/comments?post={{post.postId}}">, это прекрасно работает, но каким-то образом настройка того же маршрута через $location.path не работает. Это независимо от того, находится ли этот код в контроллере или директиве.

ответ

0

Проблема в том, что Angular's $routeProvider не соответствует путям с строкой запроса, как тот, который я предоставлял, поэтому он снова сопоставлял мою исходную страницу и перезагружал ее. Similar solution here. Это странный симптом.

5

Пробег: scope.$apply? (обратите внимание на $)

+0

Хм, да. Это решает эту проблему, но она по-прежнему не решает реальной проблемы. Теперь у меня уже есть $ $. Обертка его в '$ timeout' исправляет бит« уже выполняется », но по-прежнему не обновляет путь. Я отредактирую свой вопрос .. спасибо! – jab

+0

Вы также можете посмотреть в $ log. –

+0

Вы должны иметь возможность сделать это все в своем контроллере. –

0

scope. $ Apply работал для меня. Сначала попробуйте.

0

$location.path не поддерживает param.

Используйте вместо этого $location.url.

Смежные вопросы