【发布时间】:2014-03-09 18:34:39
【问题描述】:
我有两个控制器,它们执行非常相似的任务。
删除代码重复的适当方法是什么?
最初我尝试将创建模板方法移动为角度服务,但看起来我无法将 $scope 注入服务。
.controller("TspController", function($scope, $rootScope, $routeParams, $location, ProblemsLoader) {
$scope.problemType = "tsp";
var problemId = $routeParams.problemId;
ProblemsLoader.loadIndex("tsp", function(index) {
if (problemId) {
$scope.problems = index;
ProblemsLoader.loadProblem("tsp", problemId, function(problem) {
$scope.problem = problem
});
} else {
var firstProblemId = index[0].fileName;
$location.path("/tsp/" + firstProblemId)
}
});
})
.controller("VrpController", function($scope, $rootScope, $http, $routeParams, ProblemsLoader) {
$scope.problemType = "vrp";
var problemId = $routeParams.problemId;
ProblemsLoader.loadIndex("vrp", function(index) {
if (problemId) {
$scope.problems = index;
ProblemsLoader.loadProblem("vrp", problemId, function(problem) {
$scope.problem = problem
});
} else {
var firstProblemId = index[0].fileName;
$location.path("/vrp/" + firstProblemId)
}
});
});
【问题讨论】:
-
您是否考虑过为您的控制器使用 javascript 类模式?您可以为这些创建一个“基类”,然后将索引设置为在“构造函数”或某个回调中加载?
-
把你的控制器变成一个指令,这样你就可以把
problemType变成一个HTML属性,引导你到<div my-directive my-problem-type="tsp"/>和<div my-directive my-problem-type="vrp"/>这样的东西
标签: javascript angularjs refactoring code-duplication