我目前有一个根状态,默认使用某个布局,然后在该布局中包含用于诸如页眉,页脚,边栏等部分的命名的ui-view伪指令.
我只是想知道是否可以更改嵌套状态的布局,因为它目前不起作用,控制台或linter中没有出现任何错误.
我目前在浏览器中没有任何输出,这使得我认为我已经实施了错误的方法,因为所有路由都不会从路由状态继承.
以下是代码:
我-module.js
'use strict'; angular.module('my-module',['ngResource','ui.router']) // Routing for the app. .config(function ($stateProvider,$urlRouterProvider) { $stateProvider .state('root',{ url: '',views: { 'layout': { templateUrl: 'partials/layout/1-column.html' },'header': { templateUrl: 'partials/layout/sections/header.html' },'footer': { templateUrl: 'partials/layout/sections/footer.html' } } }) .state('root.home',{ url: '/' }) .state('root.signup',{ url: '/signup',views: { 'step-breadcrumb': { templateUrl: 'partials/signup/step-breadcrumb.html' } } }) ; $urlRouterProvider.otherwise('/'); }) ;
的index.html
<!doctype html> <html class="no-js" ng-app="my-module"> <head> <Meta charset="utf-8"> <title>My Test App</title> <Meta name="description" content=""> <Meta name="viewport" content="width=device-width"> <!-- build:css({.tmp,app}) styles/main.css --> <link rel="stylesheet" href="styles/main.css"> <!-- endbuild --> <!-- build:js scripts/modernizr.js --> <script src="bower_components/modernizr/modernizr.js"></script> <!-- endbuild --> </head> <body> <div ui-view="layout"> </div> <!-- build:js({app,.tmp}) scripts/vendor.js --> <script src="bower_components/angular/angular.js"></script> <script src="bower_components/angular-resource/angular-resource.js"></script> <script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script> <!-- endbuild --> <script src="scripts/config.js"></script> <!-- build:js({app,.tmp}) scripts/main.js --> <script src="scripts/my-module.js"></script> <!-- inject:partials --> <!-- endinject --> <!-- endbuild --> </body> </html>
1-column.html
<div class="one-column"> <!-- page header --> <div ui-view="header"> </div> <!-- / page header --> <!-- state breadcrumb (optional) --> <div ui-view="step-breadcrumb"> </div> <!-- / state breadcrumb --> <!-- page-container --> <div class="page-container"> <!-- main content --> <div ui-view="main-content"> </div> <!-- / main content --> </div> <!-- / page-container --> <!-- page footer --> <div ui-view="footer"> </div> <!-- / page footer --> </div>
欣赏帮助
如果我们的根状态应该是唯一的根状态,注入到index.html中,我们确实需要一个不同的定义:
所以对于index.html
// index.html <body> <div ui-view="layout"> </div> </body>
我们需要这个语法:
$stateProvider .state('root',{ url: '',views: { 'layout': { templateUrl: 'partials/layout/1-column.html' },'header@root': { templateUrl: 'partials/layout/sections/header.html' },'footer@root': { templateUrl: 'partials/layout/sections/footer.html' } } })
这是什么:’header @ root’?它是绝对的命名.在这里检查:
> View Names – Relative vs. Absolute Names(以下小图)
>和@L_403_2@我试图详细说明
Behind the scenes,every view gets assigned an absolute name that follows a scheme of
'viewname@statename'
,where viewname is the name used in the view directive and state name is the state’s absolute name,e.g. contact.item. You can also choose to write your view names in the absolute Syntax.
其他国家的定义也是如此.因为’root.signup’具有直接的父’root’,现有的语法将会起作用
.state('root.signup',{ url: '/signup',views: { 'step-breadcrumb': { // working AS IS ...
但是我们可以使用绝对命名,它也可以工作
.state('root.signup',views: { 'step-breadcrumb@root': { // absolute naming ...
因为这是它的工作原理.
请观察layout的例子了解更多细节