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