2013-06-18 8 views
7

Sto tentando di aggiornare $location.path da una direttiva AngularJS. Non funziona come previsto, ovvero aggiornare l'URL visualizzato nella finestra del browser e mostrare diversi contenuti sulla mia pagina. Le mie funzioni vengono sicuramente chiamate con i valori corretti, come si vede nella console. Penso che $location.path potrebbe avere qualche effetto, perché quando faccio clic sul collegamento, vengono richiamate alcune funzioni aggiuntive che verrebbero richiamate nella nuova pagina, solo la nuova pagina non verrà mai visualizzata. Quando uso $location.path all'interno di un controller, funziona come previsto, ma non nella mia direttiva.

Ecco il codice HTML per la mia direttiva:

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

Ecco la definizione della direttiva (in 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 
] 

ho la minima idea di quello che sta succedendo qui ... la mia $routeProvider è impostato per gestire /comments ma qui sto cercando di aggiungere una stringa di query al percorso. Se utilizzo un normale <a href="#/comments?post={{post.postId}}">, ciò funziona correttamente, ma in qualche modo impostare lo stesso percorso tramite $location.path non funziona. Questo è indipendentemente dal fatto che questo codice sia nel controller o nella direttiva.

risposta

0

Il problema è che il modello $routeProvider di Angular non corrisponde ai percorsi con una stringa di query, come quella che stavo fornendo, quindi corrispondeva nuovamente alla mia pagina originale e la ricaricava. Similar solution here. È comunque un sintomo strano.

5

Provare scope.$apply? (nota $)

+0

Hmm, sì. Questo risolve il problema, ma non risolveva ancora il vero problema. Ora ho $ applicato già in corso. Inserendolo in un '$ timeout' corregge il bit" già in corso "ma non aggiorna il percorso. Modificherò la mia domanda .. grazie! – jab

+0

Si potrebbe anche voler esaminare $ log. –

+0

Dovresti essere in grado di fare tutto questo nel tuo controller. –

0

scope. $ Apply ha funzionato per me. Provalo prima.

0

$location.path non supporta alcun param.

Utilizzare invece $location.url.

Problemi correlati