2013-05-03 8 views
10

Dlaczego widoki nadrzędne muszą być abstrakcyjne w celu wyświetlania widoków podrzędnych (widoków zagnieżdżonych)?ui-router Dlaczego stany macierzyste muszą być abstrakcyjne

$stateProvider 
      .state('A', {url: '/A', abstract: true, templateUrl: 'views/A.html'}) 
      .state('A.B', {url: '', abstract: true, templateUrl: 'views/B.html'}) 
      .state('A.B.C', {url:'', abstract:false, templateUrl:'views/C.html'}); 

Widok rodzic 'A' jest obsługiwana w home.html następująco:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Yomingo</title> 
    <link href="lib/bootstrap/css/bootstrap.css" rel="stylesheet"/> 
    <link href="lib/bootstrap/css/bootstrap-responsive.css" rel="stylesheet"/> 
</head> 
<body> 
    <div ui-view> 
    </div> 
<script type="text/javascript" data-main="scripts/main" src="lib/require/require.js"></script> 
</body> 
</html> 

Jeżeli którekolwiek z państw macierzystych 'A' lub 'B' jest oznaczona jako abstrakcyjne = false ui wyświetlana treść nie jest renderowana.

+1

Załóżmy, że twoja strona aplikacji to home.html, a widok nadrzędny Szablon A to widoki/A.html ... powinieneś udostępniać widoki/A.html i widoki/B.html, abyśmy mogli zobaczyć, jak widoki podrzędne są umieszczane w widokach nadrzędnych. – laurelnaiad

Odpowiedz

6

Mam podobne problemy. wszystko

Twoje trzy kraje korzystają z tego samego adresu URL/A:

  • : '/ A'
  • AB: '/ A' + ''
  • ABC: '/ A' + '' + ''

Ponieważ mają określone adresy URL, bieżący stan zostanie wybrany na podstawie yo ur aktualny adres URL. Możesz być tylko w jednym stanie na raz, więc prawdopodobnie wybrany stan jest zdefiniowany jako pierwszy.

Jeśli stwierdzisz, że stany A i A.B są abstrakcyjne, nie można ich przekształcić w, a więc nie będą uwzględniane podczas przeglądania do/A. Dlatego wybrano A.B.C, dziedzicząc z A.B i A.

Jeśli chcesz wyświetlać więcej niż jeden ze swoich widoków, polecam lekturę dokumentacji dla multiple named views, aby ułatwić śledzenie.

Powiązane problemy