根據Jack.the.ripper的回答,我創建了這個解決方案。
卡斯:我有一個微小的變化,我真的想要2佈局。一個公衆和一個私人。 在Meteor with Blaze和Iron Router中,有一個很好的解決方案,您可以定義哪個主模板將用於特定路線。 這個我現在已經能夠設置謝謝傑克!
注:代碼將在翡翠和咖啡,它是一個Meteor + Angular項目。 使用http://js2.coffee/轉換爲Javascript。
# the ROUTER part
#
angular.module('myApp').config(
($urlRouterProvider, $stateProvider, $locationProvider) ->
$locationProvider.html5Mode true
$stateProvider
.state('private',
url: ''
abstract: true
views:
'app':
templateUrl: 'client/views/layouts/privateLayout.html'
)
.state('public',
url: ''
abstract: true
views:
'app':
templateUrl: 'client/views/layouts/publicLayout.html'
)
.state('private.home',
url: '/'
views:
"[email protected]":
templateUrl: 'client/views/home/home.html'
)
.state('public.login',
url: '/login'
views:
"[email protected]":
templateUrl: 'client/views/session/login.html'
)
$urlRouterProvider.otherwise '/'
)
這是定義應用視圖的索引文件,它將利用路由器中定義的抽象狀態。
head
meta(name="viewport" content="width=device-width, initial-scale=1")
base(href="/")
body(layout="column")
div(ui-view="app" layout="column" flex)
然後私人佈局與其容器視圖。
div(layout="column" flex)
div(ng-controller="AppCtrl" layout="row" flex)
//- some private Layout stuff happening here....
md-content(flex layout-padding)
div(ui-view="container" layout="column")
終於公共佈局及其容器視圖
div.public-layout(layout="column" flex)
div(ui-view="container" layout="column" flex)
有了這個設置,我可以設置登錄頁面通過這條路線的觀點,說明使用抽象公衆的佈局,它應該使用從公共視圖中查看container @ public,使用視圖Container。在這個視圖中加載login.html。
同樣的主頁,這個加載容器@私人意味着私人視圖的容器視圖。
這似乎工作就像一個魅力。
非常感謝傑克,也是Angular UI Router - Nested States with multiple layouts的答案的作者,這幫助我找到了最終的解決方案。
乾杯
這是一個非常好的主意。 「layout」或「root」狀態有用的原因是,在應用程序內部時,「標題」或「頁腳」可能會更改。如內部帳戶管理與外部演示網站之間。雖然在這個根狀態下,它是一個抽象的狀態,我猜它沒有url屬性嗎? (我也喜歡AppCtrl,我一直在使用app.run(function(){})作爲根控制器 – CMCDragonkai
是的,根狀態可能是一個抽象狀態 雖然,抽象狀態應該有它的URL。可以用來爲子狀態預先設置一個url,但是對於根狀態,它可以保持爲'/'。 這裏是關於ui-router中抽象狀態的詳細信息:https://github.com/angular-ui/ ui-router/wiki/Nested-States-%26-Nested-Views#維基抽象狀態 至於控制器,你可以讓你的主應用程序控制器作爲該根狀態的控制器,它將工作 –
我會有一個家庭狀態URL是'/'。所以我不認爲我的抽象狀態可以在這種情況下有一個網址。 – CMCDragonkai