gpt4 book ai didi

angularjs - Angular UI Router - 具有多种布局的嵌套状态

转载 作者:行者123 更新时间:2023-12-03 06:46:35 24 4
gpt4 key购买 nike

我想要有多个布局(1-col、2-col、3-col),我想根据所需的布局将其切换为不同的路线。

我当前有一个根状态,默认使用特定布局,然后在该布局中包含用于页眉、页脚、侧边栏等部分的命名 ui-view 指令。

我只是想知道是否可以更改嵌套状态的布局,因为它目前不起作用,并且控制台或 linter 中没有出现错误。

我目前在浏览器中根本没有任何输出,这让我认为我实现了错误的方法,因为所有路由都不是从路由状态继承的。

代码如下:

My-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>

感谢帮助

最佳答案

虽然没有人展示您的示例,但我将与您分享一个:working layout example 。请观察它以了解我将在此处尝试解释的内容

如果我们的root状态应该是唯一的根状态,注入(inject)到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'?这是绝对命名。在这里检查一下:

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', {
url: '/signup',
views: {
'step-breadcrumb@root': { // absolute naming
...

因为这就是它背后的工作原理。

请遵守layout示例了解更多详细信息

关于angularjs - Angular UI Router - 具有多种布局的嵌套状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com