Javascript 如何组织和减少AngularJS控制器的大小?
我正在构建我的第一个AngularJS应用程序,并且正在努力找出如何将代码组织到服务/工厂和指令中。我的控制器代码越来越长,我知道我一定是做错了什么 最初我的应用程序有三个控制器:“BuildingTypeController”、“AddressController”和“LayoutController”。我使用ng控制器指令将每个控制器连接到我的每个字段集。但是,我在以下情况下遇到了问题:Javascript 如何组织和减少AngularJS控制器的大小?,javascript,angularjs,angularjs-directive,angularjs-controller,Javascript,Angularjs,Angularjs Directive,Angularjs Controller,我正在构建我的第一个AngularJS应用程序,并且正在努力找出如何将代码组织到服务/工厂和指令中。我的控制器代码越来越长,我知道我一定是做错了什么 最初我的应用程序有三个控制器:“BuildingTypeController”、“AddressController”和“LayoutController”。我使用ng控制器指令将每个控制器连接到我的每个字段集。但是,我在以下情况下遇到了问题: 我需要将一个控制器的数据传递给另一个控制器,以便能够在$scope.$watch代码中使用 当我需要在G
(function(global){
app.controller('MainController', function($log){
this.message = "Hello, world!";
//Usage of the global variable here.
this.names = global.data.names;
this.click = function(){
global.handlers.onclick(this);
};
});
})(this);
var-app=angular.module('formBuilder',[]);
app.controller('FormController',['$http','$scope',函数($http,$scope){
//这实际上可以被认为是“BuildingTypeController”
var form=此;
form.state=“”;
form.states=[];
form.buildingType=“”;
form.buildingTypes=[];
form.GetStates=函数(buildingType){
//稍后将替换为$http.get
if(buildingType==null)
{
form.states=[“AZ”、“CT”、“NY”];
}
如果(buildingType==“单层”){
form.states=[“AZ”,“CT”];
}
如果(buildingType==“大厦”){
form.states=[“CT”];
}
如果(buildingType==“公寓”){
form.states=[“CT”,“NY”];
}
如果(buildingType==“天空刮刀”){
form.states=[“NY”];
}
};
form.GetBuildingTypes=函数(状态){
//稍后将替换为$http.get
if(state==null)
{
form.buildingTypes=[“单层”、“大厦”、“公寓”、“天空刮板”];
}
如果(状态=“AZ”){
form.buildingTypes=[“单层”];
}
如果(状态=“CT”){
form.buildingTypes=[“单层”、“大厦”、“公寓”];
}
如果(州=“纽约”){
form.buildingTypes=[“天空刮板”,“公寓”];
}
};
//初始化
form.GetStates();
form.GetBuildingTypes();
//这真的可以被认为是“地址控制器”
form.addressId=“”;
form.addresses=[];
form.GetAddresses=函数(form){
//稍后将替换为$http.get
if(form.state==“AZ”&&form.buildingType==“单层”){
form.addresses=[{
地址:1,
描述:“格罗夫大街123号”
},{
地址:2,,
描述:“2352高等法院”
}];
}
如果(form.state==“CT”&&form.buildingType==“单层”){
form.addresses=[{
地址:3,,
描述:“云雀大道1515号”
},{
地址:4,
描述:“2前街”
}];
}
如果(form.state==“CT”&&form.buildingType==“大厦”){
form.addresses=[{
地址:5,,
描述:“6滨水区Dr”
}]
}
如果(form.state==“CT”&&form.buildingType==“公寓”){
form.addresses=[{
地址:6,
描述:“13中心街”
},{
地址:7,
描述:“5985伊丽莎白法院”
}]
}
if(form.state==“NY”&&form.buildingType==“天空刮板”){
form.addresses=[{
地址:8,
描述:“第12大道13245号”
},{
地址:9,
描述:“公园大道345号”
}]
}
if(form.state==“NY”&&form.buildingType==“公寓”){
form.addresses=[{
地址:10,,
描述:“第115街6668号”
},{
地址:11,
描述:“第三大道2839号”
}]
}
};
form.performAction=函数(expr){
返回函数(){
if(expr==“GetAddresses”){
form.GetAddresses($scope.form);
}
if(expr==“GetLayouts”){
GetLayouts($scope.form);
}
};
};
$scope.$watch('form.state',form.performation('GetAddresses');
$scope.$watch('form.buildingType',form.performation('GetAddresses');
//这真的可以被认为是“LayoutController”
form.layout={};
form.layouts=[];
form.GetLayouts=函数(表单){
if(form.addressId==1)
表格布局=[“A”、“B”、“C”、“D”];
if(form.addressId==2)
表格布局=[“B”、“C”、“D”];
if(form.addressId==3)
form.layouts=[“A”,“D”];
if(form.addressId==4)
form.layouts=[“A”,“D”];
if(form.addressId==5)
form.layouts=[“A”];
if(form.addressId==6)
form.layouts=[“D”];
if(form.addressId==7)
form.layouts=[“C”,“D”];
if(form.addressId==8)
form.layouts=[“A”,“D”];
如有需要,请填写
(function(global){
app.controller('MainController', function($log){
this.message = "Hello, world!";
//Usage of the global variable here.
this.names = global.data.names;
this.click = function(){
global.handlers.onclick(this);
};
});
})(this);
<!DOCTYPE html>
<html ng-app="TestModule">
<head>
<link rel="stylesheet" href="style.css">
<!-- Reference to Angular on CDN -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular.min.js"></script>
<!-- Reference to external data sets -->
<script src="data.js"></script>
<!-- Reference to external event handlers -->
<script src="handlers.js"></script>
<!-- Angular module init -->
<script src="module.js"></script>
<!-- Controller init -->
<script src="maincontroller.js"></script>
</head>
<body>
<div ng-controller="MainController as main">
<h3>{{ main.message }}</h3>
<div>
<h2>Names from the global data.js file:</h2>
<h3 ng-repeat="n in main.names">{{ n }}</h3>
</div>
<div>
<input type="button" ng-click="main.click()" value="Click me!" />
</div>
</div>
</body>
</html>