'aggiornamento-approvato-prodotto-campagna-annuncio' questo è lo stato figlio di 'prodotto-campagna.prodotto-campagna-dettaglio' quando chiamo stato figlio attraverso ui-sref vista stato genitore viene richiamato con vista stato figlio che non voglio Voglio solo la vista sullo stato del bambino.Nascondere la vista dello stato padre dalla visualizzazione stato figlio in angularjs, best practice?
risposta
Per quanto ne so non è possibile caricare solo la vista figlio. Ogni volta che viene caricata la vista di un bambino, la vista dei suoi genitori viene caricata anch'essa insieme ad essa.
Questo può essere fatto utilizzando il targeting per vista.
Supponiamo di avere una vista ui senza nome per il genitore nella radice. Quando il bambino è attivato, può assumere la vista senza nome del genitore usando viste mirate. Il punto di vista del bambino può mettere il proprio contenuto direttamente nella vista del genitore:
var app = angular.module("plunker", ['ui.router'])
app.config(function($stateProvider) {
$stateProvider.state('parent', {
url: "",
template: "<a ui-sref='.child'>Go to child</a><h1>Parent</h1>"
}).state('parent.child', {
url: '/child',
views: {
"@": {
template: "<a ui-sref='^'>Back to parent</a><h1>child</h1>"
}
}
})
})
o potrebbe sostituire la vista padre con un modello che appena ha un nidificato ui-vista, che a sua volta si rivolge
var app = angular.module("plunker", ['ui.router'])
app.config(function($stateProvider) {
$stateProvider.state('parent', {
url: "",
template: "<a ui-sref='.child'>Go to child</a><h1>Parent</h1>"
}).state('parent.child', {
url: '/child',
views: {
"@": {
template: "<small>parent ui-view overridden by parent.child</small> <div ui-view='child'/>"
},
"[email protected]": {
template: "<a ui-sref='^'>Back to parent</a><h1>child</h1>"
}
}
})
})
Le viste con nome mirato sono "nomevista @ statename". La vista denominata "@" indica come target la vista denominata stringa vuota ("") in (@) stato root ("").
Questa deve essere contrassegnata come risposta. Grazie per il tuo commento! –
Ho risolto questo problema avvolgendo la vista genitore con <div ui-view="">
Questo sovrascriverà la ui-view
con il bambino quando si naviga ad uno stato infantile, altrimenti conterrà vista dello stato di brevetto.
Questo è il modo corretto. Bello e semplice, fornisce una vista predefinita che viene sostituita dallo stato successivo. La risposta migliore è ottima ma per situazioni più complicate. – Wtower
Questa è una soluzione così semplice ed elegante - dove non dovrebbe funzionare? – npr
Spero che questo sia stato spiegato in modo più approfondito nella documentazione del router UI, perché la nidificazione non significa necessariamente avere componenti e sottocomponenti nel DOM tutto in una volta. –
Devo nascondere la vista genitore dalla vista figlio –