我真的很喜欢Angular,但我是一个超级n00b,仍然试图围绕这些概念。
目前,我有大约9个或10个具有几乎相同代码的控制器:
$scope.saveForm = function (viewModel) {
if ($scope.id && $scope.id > 0) {
$http.put(appConstants.baseUrl + 'v1/SiteGroupStagings/' + $scope.id, viewModel.data)
.then(function successCallback() {
$scope.master = angular.copy(viewModel);
Notification.success('Success');
}, function errorCallback(response) {
Notification.error('An error occurred while trying to save.<br /><br />' + response.statusText + '<br /><br />'+ response.data);
});
} else {
$http.post(appConstants.baseUrl + 'v1/SiteGroupStagings', viewModel.data)
.then(function successCallback() {
$scope.master = angular.copy(viewModel);
Notification.success('Success');
}, function errorCallback(response) {
Notification.error('An error occurred while trying to save.<br /><br />' + response.statusText + '<br /><br />'+ response.data);
});
}
};
因此,代码重复发生在两个地方:
then
函数(在$http.post
/ $http.put
之后)完全重复我的问题是:集中管理这些逻辑并在控制器之间共享的推荐方法是什么?
这只是我的许多控制器中几乎重复的代码的一个示例,显然这会导致严重的可维护性问题。
谢谢
答案 0 :(得分:1)
网址是一个字符串,因此您可以有条件地设置它,并将其用于$http
请求。
$scope.saveForm = function (viewModel) {
var url = 'vi/SiteGroupStagings/' + viewModel.data;
if ($scope.id && $scope.id > 0) {
url = 'vi/SiteGroupStagings/' + $scope.id + viewModel.data;
}
$http.put(appConstants.baseUrl + url)
.then(function successCallback() {
$scope.master = angular.copy(viewModel);
Notification.success('Success');
}, function errorCallback(response) {
Notification.error('An error occurred while trying to save.<br /><br />' + response.statusText + '<br /><br />'+ response.data);
});
};
我最近提到的另一件事是,如果你发现自己需要跨控制器共享方法,你应该考虑制作服务或工厂。然后,您可以在注入它的任何控制器中调用它的函数。我发现这有用:http://tylermcginnis.com/angularjs-factory-vs-service-vs-provider/