我正在构建一个角度应用程序,它基本上是我的所有站点的管理面板使用ngboilerplate的他们的环境&。我需要设置一种功能层次结构,以便在没有设置“父”的情况下,任何“子”控制器/模型都不起作用。这里是我试图解释的细节。角度模型/控制器“层次结构”设置
模型 - >环境(PROD,舞台,DEV) 一旦选择了ENV你会那么可以选择现场
模型 - >网站(所有网站从 当前ENV)一次的网站是选定你再拿到现场数据
模型 - >网站(网站数据JSON包含的东西像页面配置 值和这样)
什么是设置有道结构这样的事情?我目前只是使用单个控制器&路由(ui-router)为路由内的每个页面内。我需要确保的主要功能是,如果选择的站点更改了环境,以便从正确的环境重新加载站点的数据。我想我会用$ watch来确保?任何关于最佳实践的建议/提示赞赏!
UPDATE:在这里澄清一些细节:
我所需要的主要模式“观看”是环境模型。根据设置的env,我会调整正在使用的api url以及更改显示名称。它也会加载env的相应的站点列表(当前是一个静态的json文件,但它可能是一个api调用)。这是我在问这个问题之前编写的代码,当我得到SitesCtrl时,我意识到我可能做错了(或者不是最佳)。
Tools.js
angular.module('SupportBase.tools', [
'ui.router',
'placeholders',
'ui.bootstrap',
'SupportBase.tools.sites'
])
.config(function config($stateProvider) {
$stateProvider.state('tools', {
url: '/tools',
views: {
"main": {
controller: 'ToolsCtrl',
templateUrl: 'tools/tools.tpl.html'
},
"sites": {
controller: 'SitesCtrl',
templateUrl: 'tools/sites/sites.tpl.html'
}
},
data:{ pageTitle: 'Site Tools' }
});
})
.controller('ToolsCtrl', function ToolCtrl($scope) {
$scope.envModel = '';
});
Tools.tpl.hmtl
<div class="row">
<h1 class="page-header">
Site Tools
<small>For the lazy and impatient. {or the smart & productive}</small>
</h1>
</div>
<div class="row">
<div class="well col-md-5">
<h4>Current Working Environment:
<code class="env">{{envModel || 'null'}}</code></h4>
<div class="btn-group col-md-10 col-md-offset-2">
<label class="btn btn-primary" ui-sref="tools.sites({env: envModel})" ng-model="envModel" btn-radio="'Production'">Production</label>
<label class="btn btn-primary" ui-sref="tools.sites({env: envModel})" ng-model="envModel" btn-radio="'Stage'">Stage</label>
<label class="btn btn-primary" ui-sref="tools.sites({env: envModel})" ng-model="envModel" btn-radio="'QA'">QA</label>
<label class="btn btn-primary" ui-sref="tools.sites({env: envModel})" ng-model="envModel" btn-radio="'Dev'">Dev</label>
</div>
</div>
<div class="col-md-6" ui-view="sites"></div>
</div>
Sites.js
angular.module('SupportBase.tools.sites', [
'ui.router',
'placeholders',
'ui.bootstrap',
'SupportBase.tools'
])
.config(function config($stateProvider) {
$stateProvider.state('tools.sites', {
url: '/{env:[a-z]{1,10}}/sites',
views: {
"sites": {
controller: 'SitesCtrl',
templateUrl: 'tools/sites/sites.tpl.html'
}
},
data: {
pageTitle: 'Site Tools | SupportBase'
}
});
})
.controller('SitesCtrl', function SitesCtrl($scope, $stateParams, $http) {
$scope.env = $stateParams.env.toLowerCase();
$scope.disabled = $stateParams.env !== '' ? false : true;
if ($stateParams.env.toLowerCase() === 'production') {
$http.get('./src/app/sites/sites.json').success(function(data) {
$scope.sitesModel = data;
});
} else {
$scope.sitesModel = [$stateParams.env, 'something', 'face'];
}
});
Sites.tpl.html
<div class="well" collapse="disabled">
<h1>Site Selector</h1>
<h2>{{sitesModel}}</h2>
</div>
这应该让我走!感谢帮助! – 2015-04-01 00:48:21
@JayVanderlyn只是想给你另一个呼喊,我得到了我需要他们的方式工作。您不仅帮助我解决了当前的问题,还帮助我了解了适当的angularjs开发。非常感谢! – 2015-04-01 02:31:25