2014-02-19 69 views
9

我正在將現有的角度應用升級到所有最新版本的角度(v1.2.13),ui-router(v0.2.8)和ui-bootstrap(v0.10.0 )。角度ui-bootstrap選項卡不呈現ui-view

我有嵌套視圖具有多個命名視圖。其中一個命名視圖在其中包含選項卡。我曾經可以在每個標籤中設置ui-views,但不再有效。如果我不使用選項卡,那麼命名視圖將正確呈現。

我創建了一個plunkr to show what I'm seeing.

這是我的狀態configuraiton。 _split.html有3個已命名的視圖:TOP,MIDDLEBOTTOMTOPMIDDLE都命名爲LEFTRIGHTTOP包含選項卡,並且不會呈現視圖LEFTRIGHTMIDDLE具有相同的命名視圖,並且它們呈現正確。

$stateProvider 
     .state("foo", { 
     abstract: true, 
      url: "/foo", 
      templateUrl: '_split.html', 
     }) 
     .state("foo.view", { 
     abstract: true, 
     url: '', 
     views: { 
      'TOP': { 
      template: '_tabs.html' 
      }, 
      'MIDDLE': { 
      templateUrl: '_tabs2.html' 
      }, 
      'BOTTOM': { 
      template: '<h2>Bottom</h2>' 
      } 
     }, 
     }) 
     .state("foo.view.tabs", { 
     url: '', 
     views: { 
      'LEFT': { 
      template: '<h3>Left</h3>' 
      }, 
      'RIGHT': { 
      template: '<h3>Right</h3>' 
      } 
     } 
     }) 

有什麼辦法來渲染選項卡中UI的看法?

+0

它適用於v0.2.7(ui-router)。我只有v0.2.8纔有這個問題。也許這是一個錯誤? – ekstro

+0

確認:v0.2.7和v0.2.8之間的某些內容已經發生變化,可以解決此問題。在我的情況下,回滾到v0.2.7解決了這個問題。 – Brent

+0

感謝您的信息! –

回答

9

是的,你可以在選項卡中呈現UI視圖。訣竅是在<tab-heading>中使用ui-sref來控制狀態/路由更改,並使ui-view低於</tabset>。我相信還有其他的方式,但那是我如何得到與UI路由器的標籤。

編輯更新

以上原來的建議是錯誤的,ui-sref應在<tab>

帽尖到chris-t正確配置。

工作的多個視圖演示http://plnkr.co/edit/gXnFS3?p=preview

的index.html

<tabset> 
    <tab ui-sref="left"> 
    <tab-heading style="cursor:pointer;"> 
     <a ui-sref-active="active">Left</a> 
    </tab-heading> 
    </tab> 
    <tab ui-sref="right"> 
    <tab-heading style="cursor:pointer;"> 
     <a ui-sref-active="active">Right</a> 
    </tab-heading> 
    </tab> 
</tabset> 
<div class="row"> 
    <br> 
    <div class="col-xs-4"> 
    <div class="well" ui-view="viewA"> 
     <!--Here is the A content--> 
    </div> 
    </div> 
    <div class="col-xs-4"> 
    <div class="well" ui-view="viewB"> 
     <!--Here is the B content--> 
    </div> 
    </div> 
</div> 

app.js(UI路由器配置)

$stateProvider 
.state('left', { 
    url: "/", 
    views: { 
    "viewA": { 
     template: "Left Tab, index.viewA" 
    }, 
    "viewB": { 
     template: 'Left Tab, index.viewB<br><a ui-sref=".list">Show List</a>' + 
       '<div ui-view="viewB.list"></div>' 
    }, 
    "viewC": { 
     template: 'Left Tab, index.viewC <div ui-view="viewC.list"></div>' 
    } 
    } 
}) 
.state('left.list', { 
    url: 'list', 
    views: { 
    "viewB.list": { 
     template: '<h2>Nest list viewB</h2><ul>' + 
       '<li ng-repeat="thing in tab1things">{{thing}}</li></ul>', 
     controller: 'Tab1ViewBCtrl', 
     data: {} 
    }, 
    "viewC.list": { 
     template: 'Left Tab, list.viewC' 
    } 
    } 
}) 
+0

我能夠使用這種方法得到一個工作版本,所以謝謝。我以前能夠加載兩個選項卡,以便它們之間的切換基本上是即時的。有沒有辦法做到這一點? –

+0

是的,看看@ https://github.com/ngbp/ngbp構建系統是如何工作的,.html模板在應用程序加載時被注入DOM,由grunt編譯。從README.md:delta:tpls - 當src /中的任何* .tpl.html文件發生更改時,所有模板都將放入JavaScript文件的字符串中(技術上說,兩個用於src/common /,另一個用於src/app/)將模板添加到AngularJS的$ templateCache中,因此模板文件是初始JavaScript負載的一部分,不需要任何未來的XHR。模板緩存文件是build/template-app.js和build/template-common.js。 – cheekybastard

+0

@cheekybastard難道你不得不點擊標籤標題內的鏈接嗎?在我的情況下,單擊正方形標籤頁眉更改當前標籤,但不點擊鏈接,因此不會更改狀態。 – Stephane

3

設置選項卡,使標題的鏈接,但如果你點擊標籤但在鏈接之外,鏈接不會激活。這是我從ui-router獲得的迴應。感謝Chris T.

ui-router

plunkr

<tabset> 
    <tab ui-sref="user.list"> 
     <tab-heading><a ui-sref-active="active">Users</a></tab-heading> 
    </tab> 
    </tabset> 

更新:

我是有問題,與此深深喜歡,由於UI-S REF-活躍。從ui-router.2.10.2.11/angular-ui-router.js開始支持繼承 - 參見stack overflow post和ui-router issue 18

+0

這應該變成StackOverflow上的一個自我回答的問題。這是ui路由器初學者/中間用戶關於如何設置states.js以使標籤與標籤內容可視地分離的關鍵示例。恕我直言,關於與ui-bootstrap結合使用的ui路由器的最佳搶劫者之一。 –

+1

剛纔看到它,就在我上面評論之後。我遺忘的規則:在評論之前,請始終閱讀SO上的整個頁面。 – Stephane