Javascript AngularJS应用程序架构/结构
我正在开发具有以下结构的应用程序:Javascript AngularJS应用程序架构/结构,javascript,angularjs,architecture,angular-ui-router,Javascript,Angularjs,Architecture,Angular Ui Router,我正在开发具有以下结构的应用程序: |--------------------- header -------------------| | | |-----sidebar-----|-----------Main View----------| | | | | constraints | li
|--------------------- header -------------------|
| |
|-----sidebar-----|-----------Main View----------|
| | |
| constraints | list of topics |
| | |
| | |
| | |
|_________________________________________________
约束选择在侧栏中进行,影响主视图区域中显示的主题列表
现在这一切都很好,但我已经到了我的应用程序变得越来越复杂的阶段
在某些情况下,我希望完全替换主视图中的内容,而不是显示主题列表,而是显示主题本身(呈现另一个模板,例如views/topic.html),但我仍然希望保留侧边栏,而不是重新加载它。然后能够返回主题列表
主视图中的这个新主题视图还需要使用另一个控制器以及当前为“resultsController”的侧栏控制器
目前我使用ng route和以下结构:
$routeProvider.when('/', { templateUrl: 'views/results.html' });
<ng-view></ng-view>
// views/results.html
//------------------------------------------------------
<div data-ng-controller="resultsController">
<div ng-include src="'views/header.html'"></div>
<div ng-include src="'views/sidebar.html'"></div>
<div id="Main View">
<div ng-repeat="topic in topics"></div>
</div>
</div>
$routeProvider.when('/',{templateUrl:'views/results.html'});
//views/results.html
//------------------------------------------------------
构建/构建我的应用程序的正确方法是什么?
(我已经看过ui router这是一种方式吗?如果是,我将如何构造我的路由/视图/控制器?ui router可以通过两种方式处理此问题,嵌套视图和命名视图: 嵌套视图: 在本例中,视图从顶部开始嵌套,侧面嵌套在顶部,然后列表和项目嵌套在侧面
$stateProvider.state('top', {
url: "",
templateUrl: "header.html",
controller: 'topCtrl'
})
.state('top.side', {
url: '/app',
templateUrl: "side.html",
controller: 'filterCtrl'
})
.state('top.side.list', {
url: "/items?query",
templateUrl: "items.html",
controller: 'listCtrl'
})
.state('top.side.item', {
url: "/:id",
templateUrl: "item.html",
controller: 'itemCtrl'
});
命名视图:
另一种方法是为视图定义命名占位符,然后将它们与状态上的视图定义一起插入。这些视图称为“多个命名视图”。
占位符是命名的ui视图:
<body ng-app="nested">
<div id="header" ui-view="header"></div>
<div id="side" ui-view="side"></div>
<div id="content" ui-view="content"></div>
</body>
“side@”命名约定意味着插入名为“side”的ui视图,该视图存在于“”(根/空字符串)状态。这样,您就可以在其他模板中定义其他命名子视图,然后使用类似于details@top.item“?非常棒的解释和示例,感谢您如此清晰地解释
.state('top', {
url: "",
views: {
header: { templateUrl: "header.html" },
}
})
.state('top.list', {
url: "/items?query",
views: {
"side@": { templateUrl: "side.html", controller: 'filterCtrl' },
"content@": { templateUrl: "items.html", controller: 'listCtrl' }
}
})
.state('top.item', {
url: "/:id",
views: {
"side@": { templateUrl: "side.html", controller: 'filterCtrl' },
"content@": { templateUrl: "item.html", controller: 'itemCtrl' }
}
});