gpt4 book ai didi

javascript - AngularJS 最佳实践 - 具有多种方法的工厂

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

我有一个工厂提供三种不同的 $http.get 方法。

angular.module('myApp')
.factory('getFactory', function ($http, $q) {

return {

methodOne: function () {
var deferred = $q.defer();

$http.get('path/to/data')
.then(function successCallback (data) {
deferred.resolve(data);
},function errorCallback (response) {
console.log(response);
});

return deferred.promise;
},

methodTwo: function (arg1, arg2) {
var deferred = $q.defer();

$http.get('path/to/' + arg1 + '/some/' + arg2 + 'more/data')
.then(function successCallback (data) {
deferred.resolve(data);
},function errorCallback (response) {
console.log(response);
});

return deferred.promise;
},

methodThree: function (arg1, arg2, arg3) {
var deferred = $q.defer();

$http.get('path/to/' + arg1 + '/some/' + arg2 + '/more/' + arg3 + '/data')
.then(function successCallback (data) {
deferred.resolve(data);
},function errorCallback (response) {
console.log(response);
});

return deferred.promise;
},
};
});

基本上,这些方法仅在获取数据的路径上有所不同。这些方法获取的数据在 Controller 中处理。我一边阅读了很多 Angular 最佳实践,一边看到了 DRY(不要重复自己)提示。

我觉得我上面的代码太重复了。有没有更好的方法来编写这种Angular 方式

**注意:我使用 yeoman 生成器来构建我项目的目录。

最佳答案

angular.module('myApp')
.factory('getFactory', function ($http, $q) {

//Using revealing Module pattern
var exposedAPI = {
methodOne: methodOne,
methodTwo: methodTwo,
methodThree: methodThree
};

return exposedAPI;

//Private function, not required to be exposed
function get(url){
//$http itself returns a promise, so no need to explicitly create another deferred object
return $http.get(url)
.then(function (data) {
//Create deferred object only if you want to manipulate returned data
}, function (msg, code) {
console.log(msg, code);
});
}

function methodOne() {
//DRY
return get('path/to/data');
}

function methodTwo(arg1, arg2) {
return get('path/to/' + arg1 + '/some/' + arg2 + 'more/data');
}

function methodThree(arg1, arg2, arg3) {
return get('path/to/' + arg1 + '/some/' + arg2 + '/more/' + arg3 + '/data');
}
});

关于javascript - AngularJS 最佳实践 - 具有多种方法的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33393436/

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