gpt4 book ai didi

javascript - 如何摆脱 Angular Controller 中的代码重复?

转载 作者:行者123 更新时间:2023-11-29 18:17:03 25 4
gpt4 key购买 nike

我有两个执行非常相似任务的 Controller 。

删除重复代码的合适方法是什么?

最初我尝试移动创建一个模板方法作为 Angular 服务,但看起来我无法将 $scope 注入(inject)服务。

.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)
}
});
});

最佳答案

实际上,服务是这个用例的一个很好的解决方案,注入(inject) $scope 不是必需的。

当服务公开对象属性时,会在其上设置隐式监视,以便透明地传播状态更改。

服务:

var problemSvc = function($http) {
var problemData = {
problemId: 1,
problemField: '',
otherProblemField: ''
};

return {
problem: problemData, // exposing the data as object
loadProblem: function(problemId) {
// load logic here
problemData.problemField = 'load data here';
problemdata.otherProblemField = 'more data from server or whatever';
}
}
}
angular.service('problemSvc', ['$http', problemSvc]);

1-N 消费 Controller :

angular.controller('ctrl', ['$scope', 'problemSvc', function($scope, problemSvc) {
$scope.problem = problemSvc.problem;
}]);

随着问题服务中字段的变化,注入(inject)服务的任何 Controller 都将自动更新

<div>{{problem.problemField}}</div>

关于javascript - 如何摆脱 Angular Controller 中的代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22286317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com