2014-07-23 22 views
7

Próbuję wstawić panel do edycji, w zależności od tego, czy przeglądarka jest właścicielem, czy nie. W tej chwili mam problem z wstrzyknięciem panelu/częściowego widoku do html. Chcę, aby moja strona composition/views/view.html była "podstawową" stroną html, do której wstawiono częściowe. Następnie widok częściowy znajduje się w komendach/views/partials/views.tools.html. Czy ktoś widzi coś złego z moim $ stateProvider, który wyjaśniłby, dlaczego nie mogę wstrzyknąć mojej części do mojego views.html?

Oto moja $ 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 

to jest mój znaczników dla mojego view.html (główny html)

<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> 

Każda pomoc lub rada jest mile widziana. Dzięki

+0

co otrzymujesz błąd w konsoli? – V31

+0

Zacznę od wyczyszczenia tego podwójnego szablonuUrl i kontrolera w widoku zwanym "widokiem". –

+0

Dyrektywa, która warunkowo pokazywała panel edytora, prawdopodobnie byłaby bardziej odpowiednia. – craigb

Odpowiedz

11

Tutaj stworzyłem working example, który powinien dać wszystkie odpowiedzi.

Skorygowana defintion stan jest:

$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' 
    } 
    }, 

najważniejsze jest to, że compositions.views.view.html jest teraz w roli tarczy dla rodzeństwemtheTool widzenia. oba widoki są zdefiniowane w tym samym stanie ("widok"), ale jedno z nich jest wstrzykiwane do drugiego.

Również w index.html Zrobiłem tę zmianę:

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

więc teraz mamy nienazwany UI-view zamiast nazwiska. Dlatego zarówno stwierdza

  • allCompostions
  • zobacz

który kierować nienazwany widok '' są teraz prawidłowo renderowane. Se więcej tutaj w tym example

Więcej o logice widok wstawienia:

mały wymienić:

za kulisami, każdy widok zostanie przydzielony absolutną nazwa podążająca za schematem , gdzie viewname jest na ja używane w dyrektywie widoku, a nazwa stanu to bezwzględna nazwa stanu, np. contact.item. Możesz także zapisać swoje nazwy widoków w absolutnej składni.

Niesamowite przykłady z tego samego źródła:

.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

Dziękuję bardzo za szczegółowy problem i szybką informację zwrotną. To było pomocne, ale nadal jestem zdezorientowany w kilku kwestiach. Dlaczego zmieniłeś ścieżkę templateUrl na "." zamiast '/'? Otrzymuję przekierowanie za każdym razem, gdy przechodzę do/composition/view/15 z powrotem do/composition/recent, co jest dziwne, ponieważ nie dodałem przekierowania. Widziałem konfigurację na plunkerze i nie uwzględniłem jej .. – courtyen

+0

Trudno powiedzieć, co powoduje przekierowanie ... ale plunker działa, więc spróbuj użyć części tego ... i twoje lokalne rzeczy powinny działać. Co jest najnowsze? Jeśli rozwiążesz pytanie, a ja będę wdzięczny za pomoc ... –

+0

Okay! To działa! Bardzo ci dziękuję!!! To jest niesamowite. Problem z przekierowaniem polegał na tym, że otrzymałem błąd 404 z moim głównym szablonem. Próbowałem zmienić nazwy niektórych plików i usunąłem je. Po przywróceniu go zadziałało. – courtyen