Javascript 如何用许多子状态组合简化角ui路由器嵌套状态?
以下是我的应用程序的模型: “左侧栏”表示目录,“主要内容”表示文件。从选定目录([列表模式])枚举文件 “左侧杆”可用于2个其他用途:Javascript 如何用许多子状态组合简化角ui路由器嵌套状态?,javascript,angularjs,angular-ui,angular-ui-router,Javascript,Angularjs,Angular Ui,Angular Ui Router,以下是我的应用程序的模型: “左侧栏”表示目录,“主要内容”表示文件。从选定目录([列表模式])枚举文件 “左侧杆”可用于2个其他用途: 显示表单以创建新目录([创建模式]) 显示表单以编辑所选目录([编辑模式]) 类似地,主要内容也可以处于[列表模式]、[编辑模式]和[创建模式]。因此,总共有3 x 3种可能的组合 使用ng开关,可以很容易地对其进行建模 <div class="left-bar"> <div ng-switch on="directory.mode"&
<div class="left-bar">
<div ng-switch on="directory.mode">
<div ng-switch-when="list"></div>
<div ng-switch-when="create"></div>
<div ng-switch-when="edit"></div>
</div>
</div>
<div class="main-content">
<div ng-switch on="files.mode">
<div ng-switch-when="list"></div>
<div ng-switch-when="create"></div>
<div ng-switch-when="edit"></div>
</div>
</div>
一个重要的要求是:当切换“左侧栏”模式时,“主要内容”的内容不应改变(仍应保持与之前相同的模式),反之亦然
如何简化这一点?首先考虑,记住
angular ui router
能够处理嵌套状态。我通常使用.state('root')
,.state('root.app')
,.state('root.app.specific')
,等等。借助angular ui router
的特性,我们可以简单地在root
状态设置$scope.data={status:'ok'}
,以及在root的子级中,我们仍然可以称之为$scope.data
另外,如果您的创建
,列表
,编辑
是通用的“类”或单例。您还可以在控制器类型$controller(“[parent controller]”,{$scope:$scope})中使用角度控制器继承
,使其变得简单代码>。因此,您的父控制器/code>'s$scope
它们拥有的类似方法等将能够在new controller
's$scope
内调用<代码>角度ui路由器的嵌套状态与此类似。例如:
Application.controller('AppCtrl', ['$scope', '$controller', function($scope, $controller) {
$controller('AdminCtrl', {$scope: $scope});
}]);
在该示例中,我的AppCtrl
将具有AdminCtrl
的$scope
Application.controller('AppCtrl', ['$scope', '$controller', function($scope, $controller) {
$controller('AdminCtrl', {$scope: $scope});
}]);