gpt4 book ai didi

javascript - 如何引导基于组件的 Angular 1 应用程序?

转载 作者:行者123 更新时间:2023-12-03 04:31:12 25 4
gpt4 key购买 nike

使用 Angular 1.6,以下是我需要的组件:

+-------------------+
|side| |
|bar | |
|... | view |
|... | |
|... | |
+-------------------+
  • 侧边栏:放置在左侧。使用 ng-repeat 并动态更新。
  • View :应用程序的其余部分。模板是静态的,但单击侧栏时内容会发生变化。

当用户单击每个列表时<li>侧栏,它更新 View 。只有 View 内容/模型会改变。不是 html 模板。

重要提示:我只是不想在 <body> 中编写代码。希望在一个 html 文件中包含侧边栏,并在与其 Controller 关联的另一个文件中查看,并通过 ng-view 渲染整个应用程序在<body>

侧边栏动态更新,因此我无法在 config() 中为每个侧边栏指定状态。

任何其他标准架构都值得赞赏。

最佳答案

正如评论中提到的,可以选择多种架构和框架来实现您正在寻找的模板类型。我将提供一个基于我过去使用过的 Angular 内容的基本示例,使用 ui-router 和子/嵌套 View 。

假设您有一个像这样的index.html:

<body>
<div ui-view="header" class="header"></div>
<div ui-view="main" class="main"></div>
<div ui-view="footer" class="footer"></div>
</body>

索引页仅具有最高级别 View 的布局,即页眉、内容和页脚。如果您不需要页眉和页脚,则可以忽略/删除它。现在,您正在寻找的布局(左侧有侧边栏,右侧有内容)将放置在 View 中。为此,让我们声明另一个页面来定义此结构,将其命名为landing.html(为了简单起见,使用bootstrap):

<div class="container-fluid">
<div class="row landingContainer">
<div class="col-md-2 col-sm-4 col-xs-3 sidebarSection">
<div class="row item" ng-click="landing.changePage('content1')">
<span>Show Content 1</span>
</div>
<div class="row item" ng-click="landing.changePage('content2')">
<span>Show Content 2</span>
</div>
<div class="row item" ng-click="landing.changePage('content3')">
<span>Show Content 3</span>
</div>
</div>
<div class="col-md-10 col-sm-8 col-xs-9 contentSection">
<div ui-view="content"></div>
</div>
</div>
</div>

您可以将此页面视为布局的根。使用引导列将页面分为左右部分。左侧包含所有内容 View 的列表。你可以使用 li,我只是更喜欢 div。右侧将是页面的动态部分所在的位置,其中内容将根据侧栏中所选的项目而变化。每个组件 View 都是登陆页面的 subview ,它继承父 View 的所有功能,然后将自己的内容添加到 ui-view 中,类似于landing.html 将其内容添加到 ma​​in 中ui- View 。现在让我们看一下使这一切工作的 ui-router 配置。

function routerConfig($stateProvider, $urlRouterProvider) {
$stateProvider
.state('landing', {
url: '/landing',
views: {
'header': {
templateUrl: 'app/components/header/headerPrivate.html',
controller: 'HeaderController',
controllerAs: 'header'
},
'main': {
templateUrl: 'app/landing/landing.html',
controller: 'LandingController',
controllerAs: 'dashboard'
},
'footer': {
templateUrl: 'app/components/footer/footer.html',
controller: 'FooterController',
controllerAs: 'footer'
}
}
})
.state('landing.content1', {
url: '/content1',
views: {
'content': {
templateUrl: 'app/content1/content1.html',
controller: 'Content1Controller',
controllerAs: 'content1'
}
}
})
.state('landing.content2', {
url: '/content2',
views: {
'content': {
templateUrl: 'app/content2/content2.html',
controller: 'Content2Controller',
controllerAs: 'content2'
}
}
})
.state('landing.content3', {
url: '/content3',
views: {
'content': {
templateUrl: 'app/content3/content3.html',
controller: 'Content3Controller',
controllerAs: 'content3'
}
}
})
$urlRouterProvider.otherwise('/');
}

在这里,您会注意到着陆页路由定义了 3 个主要 View (页眉、主视图和页脚)的配置。 URL 路径将为/landing。然后,通过使用点符号将 content1、content2 和 content3 嵌套在 Landing 中,将它们定义为子项:landing.content1。然后,每个子项的 URL 路径将解析为 /landing/content1/landing/content2landing/content3。因此,现在只要您导航到这些位置,只有该特定子项的内容将嵌套在着陆页“内容”ui-view 中,并且页面的其余布局保持不变。

为了完整起见,着陆 Controller 可能是这样的:

function LandingController($state) {
var vm = this;

vm.changePage = function(page){
$state.transitionTo('landing.'+page, null, null);
}
}

关于javascript - 如何引导基于组件的 Angular 1 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43479606/

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