Javascript 代码组织AngularJS巨型控制器
我有一个巨大的控制器,我把它分为多个子系统,我根据它们的功能将其放入其他文件中 一切正常,但我需要一个建议和我的问题的答案: 我做对了吗 这是一个巨大的控制器:Javascript 代码组织AngularJS巨型控制器,javascript,angularjs,code-organization,Javascript,Angularjs,Code Organization,我有一个巨大的控制器,我把它分为多个子系统,我根据它们的功能将其放入其他文件中 一切正常,但我需要一个建议和我的问题的答案: 我做对了吗 这是一个巨大的控制器: function controller($scope, $http) { //code someFunction($scope, boolA, function1, function2); //code } function someFunction($scope, boolA, function1, function2
function controller($scope, $http) {
//code
someFunction($scope, boolA, function1, function2);
//code
}
function someFunction($scope, boolA, function1, function2) {
//code where I use all the parametrs of function
function someFunctionSubcontoller() {
//here is used another function from other subcontroller
}
}
以下是我的分包商在其他文件中的代码,我在前控制器后加载:
function controller($scope, $http) {
//code
someFunction($scope, boolA, function1, function2);
//code
}
function someFunction($scope, boolA, function1, function2) {
//code where I use all the parametrs of function
function someFunctionSubcontoller() {
//here is used another function from other subcontroller
}
}
可以将函数作为参数发送吗?因为$scope监视所有东西,所以我不从转包商处退货可以吗?我是否可以在另一个控制器中使用一些控制器功能
现在我看到不好和不正确,但我需要拆分主控器,因为其中有超过10k行代码
谢谢你的建议和帮助 我建议您在编写代码时使用angular.module()。我将以良好的模块化方式分离您的代码 您可以创建一个子控制器,并使用
$controller
依赖项将其注入主控制器中
var app = angular.module('myApp',[]);
app.controller('subCtrl', function(){
$scope.test3 = function(){
//code
};
$scope.test4 = function(){
//code
};
});
app.controller('ParentCtrl', function($scope, $controller){
//injecting subCtrl scope inside ParentCtrl
$controller('subCtrl', {$scope: $scope});
//after this line method and $scope variables of subCtrl will be available.
$scope.test = function(){
//code
};
$scope.test2 = function($scope){
//code
};
});
一个拥有10000行代码的控制器尖叫着说你在多次破坏代码 <>而不是做“子控制器”,您应该首先考虑重构代码并将可重用代码段移动到服务中。然后,在UI中寻找可以转换为指令的通用组件,并使用隔离作用域将一些逻辑移动到这些指令的控制器中。您会发现,当这些元素对自己负责时,控制和测试这些元素要容易得多 接下来,研究使用“”语法,它允许您打破与
$scope
的联系。使用$scope
非常困难,因为很难确定直接放置在$scope
上的项目的来源、使用和修改位置。很容易发现一个对象的值与您想要的值不同,因为它是在其他地方修改的。从:
•当多个控制器应用于一个元素时,使用控制器as可以清楚地显示您在模板中访问的控制器
•如果将控制器编写为类,则可以更轻松地从控制器代码内部访问属性和方法,这些属性和方法将显示在作用域上
•因为绑定中总是有一个
,所以您不必担心原型继承掩蔽原语
总之,您可能会发现,如果您重构代码而不是仅仅“分解代码”,您将得到一个更易于管理、可测试和可靠的解决方案。您应该重新组织代码并提供服务,而不是像您所说的那样进行分包。这可能比您所期望的更多信息,但是,如果您想要一种模式更好地组织您的代码,请查看DCI:“使用$scope是一种反模式”这句话是什么意思?@Richard我尽力在这里解释,一年后我仍然坚持这一点。添加了“控制器作为”语法作为一种机制,将控制器直接别名到UI,而不是在
$scope
上使用“半全局”对象。大多数较新的文档都不鼓励使用$scope
,并且$scope
已从angular 2.0中完全删除$scope
在小型项目/样板中很方便,但在大型项目中不可持续。