angolare ui-router: come faccio a ricaricare stato un percorso parametro cambia, ma non ricaricare quando un parametro di query modifiche?

Per esempio, voglio che questo cambiamento di navigazione per ricaricare lo stato:

  • #/detail/1
  • #/detail/2

Ma io non voglio questo, la navigazione per ricaricare lo stato:

  • #/detail/1?search=blah
  • #/detail/1?search=huzzah

Secondo il ui-documentazione del router, impostando reloadOnSearch: false dovrebbe fare questo, ma cercare il plunk di seguito. Quando reloadOnSearch === false, cambiando il parametro path non ricaricare lo stato anche se la documentazione dice che dovrebbe.

Plunkr: http://run.plnkr.co/ZPy9uabYlkMilwdS/#/param

  • Avete mai trovare una soluzione per fare quello che hai detto sopra? Ho bisogno la stessa cosa.
InformationsquelleAutor Matt York | 2014-07-08



2 Replies
  1. 32

    Ho creato un plunker, dimostrando che ui-router funzione reloadOnSearch lavora come documentato qui:

    reloadOnSearch:

    Boolean (predefinito true). Se false non retrigger stesso stato solo perché un di ricerca/parametro di query è cambiato. Utile per quando si desidera modificare $posizione.search() senza l’attivazione di una ricarica.

    Così, ciò che questo dice, che se noi abbiamo stato come questo

    .state('index.detail', {
          url: '/detail/:id',
          reloadOnSearch : false,
          ...
        })

    la navigazione verso il

    • ui-sref="index.detail({id:1})"

    farà carico di questo stato, durante la navigazione a

    • ui-sref="index.detail({id:any-other-id})"

    non fa nulla. Ma! Se vogliamo introdurre nuove (es. fratelli) stato definito come questa:

    .state('index.other', {
          url: '/other/:id',
          reloadOnSearch : false,
          ...
        })

    navigazione al di sotto, la sequenza di ri-attivare lo stato di ricarica, non perché il param cambiare, ma perché il cambiamento di stato

    1. <a href="#/index/detail/1" ...
    2. <a href="#/index/other/1" ... //will relaod
    3. <a href="#/index/detail/2" ... //because the state
    4. <a href="#/index/other/2" ... //is changing

    Vedere che tutti in azione qui

    • Grazie, ma questo non risponde alla mia domanda. “Se false non si riavvia lo stesso stato solo perché un ricerca/parametro di query è cambiato.” “ricerca/parametro di query” si riferisce a $posizione.di ricerca(), cioè tutto quello che viene dopo il punto di domanda. Voglio essere in grado di cambiare quello che c’è prima del punto di domanda e di ricaricare lo stato.
    • Questo è missunderstanding dei termini. 1) ricerca/parametri di query sono parti di url mappata come parametri (ad esempio, stateName/paramValue/stateName?param1=valore1&param2=valore2). Parti mappata come stato-nome identificators sono il resto. Così che cosa è il reloadOnSearch = false su? non attivare lo stato di ricarica, se params parti di url sono cambiate. Ma se lo stato è cambiato… sarà reidrect. È un po ‘ più chiaro?
    • Dalla prospettiva del ui-router, url, rappresenta un unico stato di definizione. Potrebbe essere uno o molti/nidificati uniti, con molti parametri. Alcuni potrebbero essere anche in un formato di github.com/angular-ui/ui-router/wiki/… – query con parametri. Ma alla fine, questo url viene convertito in 1. gli stati e 2) params. Nulla di più. E reloadOnSearch=false significa: qualsiasi param di stato attuale ha cambiato == non ricaricare. Che è esattamente ciò che il docum. dice, ed è quello il mio plunker mostra 1:1. Ma ho solo cercato di spiegare, non fraintendetemi… non posso accettare che si vede che in modo diverso..
    • nel tuo OP si stanno cambiando le parti dopo l’hash, e hanno reloadOnSearch impostata su falso che è stato progettato per ignorare le modifiche nelle parti dopo l’hash. Il problema è molto semplice da capire. La documentazione può essere ambiguo, ma RadimKöhler è semplicemente affermando su fatti veri come funziona.
    • mi sembra un hack per introdurre un elemento di pari livello statale, rende per disordinato Url per la vostra applicazione. È possibile farlo nel modo in cui @MattYork intendeva?
    • Non sono sicuro se c’è risposta … altro che questo. Solo una mia piccola nota personale, sto utilizzando l’interfaccia utente-Router abbastanza lungo di tempo, e sono stato in grado di coprire tutte le esigenze di business con l’attuazione come è (per lo più 0.2.15 versione)
    • l’idea del fratello percorsi è ridicolo, soprattutto se si tratta di visualizzare le stesse informazioni. Stringa di Query e $stateParams devono essere trattati in modo diverso a mio parere
    • questo è, infatti, un bug nell’interfaccia utente del Router. Riconosciuto qui: github.com/angular-ui/ui-router/issues/1191. La “correzione” di cui si parla nel bug report non ha funzionato la Tua soluzione richiede la presenza di due url diversi per lo stato, ma non è accettabile per noi. Abbiamo anche utilizzato all’interfaccia utente del router per un lungo periodo di tempo. Abbiamo molto specifici requisiti degli url, e abbiamo trovato UI-Router difettoso e inflessibile. Facendo qualcosa che non è il libro richiede hack (siamo stati letteralmente incoraggiati dai manutentori di modificare il sorgente per ottenere le funzionalità di cui abbiamo bisogno).
    • ci sono due diversi tipi di parametri url: percorso e della ricerca (aka query). reloadOnSearch è inteso applicare solo per i parametri di ricerca, non percorso parametri. Vedere questo problema: github.com/angular-ui/ui-router/issues/1191
    • È un peccato che tu non la soluzione.. senza hacking. Controllare questo ultimo ramo. github.com/angular-ui/ui-router/tree/…, forse il futuro 1.0 può soddisfare le vostre esigenze
    • Questo mi ha aiutato molto, grazie, godere della generosità.

Lascia un commento