2014-05-11 18 views
20

Tôi có một cấu hình như dưới đây:Bộ định tuyến giao diện người dùng AngularJS: Cách định cấu hình chế độ xem được đặt tên lồng nhau?

... 
.state('profiles', { 
    abstract: true 
    , url : '/profiles' 
    , resolve: {...}  
    , views: { 
     mainModule: { 
     templateUrl : '/partials/home.html' 
     , controller : 'HomeCtrl' 
     } 
     , leftSidePaneModule: { 
      templateUrl : '/partials/leftSidePane.html' 
      , controller : 'LeftSidePaneCtrl' 
     } 
    } 
    }) 
... 

chính Jade tập

... 
.col-xs-4.col-md-4.chat_block(ui-view='leftSidePaneModule', autoscroll="false") 
... 

Vì vậy, leftSidePaneModule mô-đun được dân cư trong để ui-view='leftSidePaneModule' giữ chỗ. Nhưng vấn đề là, tôi có thêm 2 lượt xem có tên trong mẫu leftSidePaneModule. leftSidePaneModule mẫu trông như thế này:

leftSidePaneModule.html

<div> 
    <div ui-view="leftWidgetOne"></div> 
    <div ui-view="leftWidgetTwo"></div> 
</div> 

Làm thế nào để tôi làm cho module leftWidgetOne & leftWidgetOne được dân cư trong để giữ chỗ trên?

tôi đã cố gắng,

... 
.state('profiles', { 
    abstract: true 
    , url : '/profiles' 
    , resolve: {...}  
    , views: { 
     mainModule: { 
     templateUrl : '/partials/home.html' 
     , controller : 'HomeCtrl' 
     } 
     , leftSidePaneModule: { 
      templateUrl : '/partials/leftSidePane.html' 
      , controller : 'LeftSidePaneCtrl' 
     } 
     , '[email protected]dePaneModule' : {...} 
     , '[email protected]' : {...} 
    } 
    }) 
... 

Attempt: 2

... 
.state('profiles', { 
    abstract: true 
    , url : '/profiles' 
    , resolve: {...}  
    , views: { 
     mainModule: { 
     templateUrl : '/partials/home.html' 
     , controller : 'HomeCtrl' 
     } 
     , leftSidePaneModule: { 
      templateUrl : '/partials/leftSidePane.html' 
      , controller : 'LeftSidePaneCtrl' 
      , views: { 
      'leftWidgetOne' : {...} 
      , 'leftWidgetTwo' : {...} 
      } 
     } 
    } 
    }) 
... 

Cả hai đều không làm việc.

Bạn làm như thế nào?

Cảm ơn!

+0

Điều này có thể giúp bạn: http://stackoverflow.com/questions/12863663/angularjs-complex-nesting-of-partials-and-templates – Iansen

+0

đây là * không * lồng nhau v iews ... chúng song song ... – user3338098

Trả lời

64

Giải pháp có thể tìm thấy tại đây: View Names - Relative vs. Absolute Names. Một trích dẫn:

Đằng sau hậu trường, mỗi điểm được gán một tên tuyệt đối rằng sau một chương trình của [email protected], nơi viewname là tên được sử dụng trong view chỉ thị và bang tên là tên tuyệt đối của nhà nước, ví dụ contact.item
...
(lưu ý: trong trường hợp của chúng tôi phải là 'profiles').

Vấn đề là, chúng ta có thể sử dụng đầy đủ (tuyệt đối) tên của view, là một phần của định nghĩa tình trạng hiện thời :

$stateProvider 
    .state('profiles', { 
     url: '/profiles', 
     views: { 
      mainModule: { 
       template: '<div>' + 
          ' <h1>Main</h1>' + 
          ' <div ui-view="leftSidePaneModule"></div>' + 
          '</div>', 
      }, 
      // here we do target the view just added above, as a 'mainModule' 
      // as <div ui-view="leftSidePaneModule"> 
      '[email protected]': { 
       template: '<div>' + 
          ' <div ui-view="leftWidgetOne"></div>' + 
          ' <div ui-view="leftWidgetTwo"></div>' + 
          '</div>', 
      }, 
      // and here we do target the sub view 
      // but still part of the state 'profiles' defined in the above 
      // view defintion '[email protected]' 
      '[email protected]': { 
       template: '<h2>One</2>', 
      }, 
      '[email protected]': { 
       template: '<h2>Two</2>', 
      }, 
     } 
    }); 

Ngoài ra còn có plunker hiển thị ở trên mã đang hoạt động

+1

Cảm ơn. Nó đã giúp rất nhiều! –

+1

Nghiêm túc, THANK YOU để giải thích điều này. Tôi không thể nói với bạn bao lâu tôi đã cố gắng để tìm ra điều này. – subvertallchris

+1

điều này cần phải được upvoted rất nhiều lần hơn nó được. Tôi đã tìm kiếm mãi mãi để tìm thấy điều này. –

Các vấn đề liên quan