2014-07-23 28 views
7

Sto cercando di iniettare un pannello per la modifica, a seconda che sia il proprietario o meno. In questo momento, sto avendo problemi ad iniettare il pannello/vista parziale nell'html. Voglio che le mie composizioni/views/view.html siano la pagina html "di base", in cui è inserito il partial. Quindi la vista parziale è a composizioni/views/partial/views.tools.html. Qualcuno vede qualcosa di sbagliato nel mio $ stateProvider che spiegherebbe perché non posso iniettare il mio partial nel mio views.html?

Ecco il mio $ stateProvider:

$stateProvider 
     .state('all compositions', { 
      url: '/compositions/recent', 
      templateUrl: 'compositions/views/list.html' 
     }). 
      state('view', { 
       url: '/compositions/view/:compositionId', 
       views: { 
       'theTool':{ 
       templateUrl:'compositions/views/partials/view.tool.html' , 
        controller: 'CompositionsController' 
       } 
       }, 
       templateUrl: 'compositions/views/view.html', 
       controller: 'CompositionsController', 

      }). //other states here 

questo è il mio margine di profitto per la mia view.html (HTML principale)

<div ui-view="theTool"></div> 
<section data-ng-controller="CompositionsController" data-ng-init="findOne()"> 
    <h2>{{composition.title}}</h2> 
    <div ng-bind-html="trustedContent"></div> 
</section> 

Qualsiasi aiuto o consiglio è molto apprezzato. Grazie

+0

quale errore si ricevendo nella console? – V31

+0

Vorrei iniziare pulendo questo doppio templateUrl e controller nella vista chiamata 'view'. –

+0

Una direttiva che mostrava condizionatamente il pannello dell'editor sarebbe probabilmente più appropriata. – craigb

risposta

11

Qui ho creato un working example, che dovrebbe dare tutte le risposte.

Il defintion stato rettificato è:

$stateProvider 
    .state('allCompositions', { 
    url: '/compositions/recent', 
    templateUrl: 'compositions.views.list.html' 
    }). 

state('view', { 
    url: '/compositions/view/:compositionId', 
    views: { 
    '': { 
     templateUrl: 'compositions.views.view.html', 
     controller: 'CompositionsController', 
    }, 
    '[email protected]': { 
     templateUrl: 'compositions.views.partials.view.tool.html', 
     controller: 'CompositionsController' 
    } 
    }, 

il più importante è, che il compositions.views.view.html ora sta giocando il ruolo di un obiettivo per l'fratello vista theTool. entrambe le viste sono definite sullo stesso stato ('vista') ma una di queste viene iniettata nell'altra.

Anche nel index.html ho fatto questo cambiamento:

<!--<div ui-view="theTool"></div>--> 
<div ui-view=""></div> 

così ora noi abbiamo senza nome ui-view al posto del nome. Ecco perché entrambi gli Stati

  • allCompostions
  • vista

che prendono di mira vista senza nome '' sono ora correttamente resi. Se di più qui in questa example

più sulla logica di inserimento vista:

piccola citare:

Dietro le quinte, ogni vista viene assegnato un assoluto nome che segue uno schema di [email protected], dove viewname è il na me usato nella direttiva view e il nome dello stato è il nome assoluto dello stato, ad es. contact.item. Puoi anche scegliere di scrivere i nomi delle tue viste nella sintassi assoluta.

esempi impressionanti dalla stessa fonte:

.state('contacts.detail', { 
    views: { 
    //////////////////////////////////// 
    // Relative Targeting    // 
    // Targets parent state ui-view's // 
    //////////////////////////////////// 

    // Relatively targets the 'detail' view in this state's parent state, 'contacts'. 
    // <div ui-view='detail'/> within contacts.html 
    "detail" : { },    

    // Relatively targets the unnamed view in this state's parent state, 'contacts'. 
    // <div ui-view/> within contacts.html 
    "" : { }, 

    /////////////////////////////////////////////////////// 
    // Absolute Targeting using '@'      // 
    // Targets any view within this state or an ancestor // 
    /////////////////////////////////////////////////////// 

    // Absolutely targets the 'info' view in this state, 'contacts.detail'. 
    // <div ui-view='info'/> within contacts.detail.html 
    "[email protected]" : { } 

    // Absolutely targets the 'detail' view in the 'contacts' state. 
    // <div ui-view='detail'/> within contacts.html 
    "[email protected]" : { } 

    // Absolutely targets the unnamed view in parent 'contacts' state. 
    // <div ui-view/> within contacts.html 
    "@contacts" : { } 
+0

Grazie mille per il problema dettagliato e il feedback rapido. Questo è stato utile, ma sono ancora confuso su un paio di cose. Perché hai cambiato il percorso templateUrl in "." invece di '/'? Mi sto reindirizzando ogni volta che vado a/compositions/view/15 back to/compositions/recent, il che è strano perché non ho aggiunto un reindirizzamento. Ho visto la configurazione su plunker e non l'ho inclusa .. – courtyen

+0

Difficile dire cosa stia causando il reindirizzamento ... ma il plunker sta funzionando, quindi prova ad usare parti di quello ... e le tue cose locali dovrebbero funzionare. Cosa è recente? Se estendi la domanda e sarò lieto di aiutarti ... –

+0

Okay! Funziona! Grazie mille!!! È stupefacente. Il problema con il reindirizzamento era che stavo ottenendo un errore 404 con il mio modello principale. Stavo cercando di rinominare alcuni file e l'ho cancellato. Dopo averlo ripristinato, ha funzionato. – courtyen

Problemi correlati