我对angularjs非常陌生,我需要做以下工作:我几乎没有部分视图,每个视图都包含简单的配置表单,需要将其获取/放到服务器上。
每个视图都有一个控制器,每个控制器都有一个相应的服务,负责对给定的后端端点执行GET/PUT请求。
服务现在只在端点url中不同。
问题是:如何避免以下情况?
var providerConfigService = function ($http) {
this.fetchConfig = function (endpointUrl, success, failure) {
$http.get(endpointUrl)
.success(function (data) {
success(data)
})
.error(function (data, status) {
failure(status)
});
};
this.updateConfig = function (endpointUrl, config, success, failure) {
$http.put(endpointUrl, config)
.success(function (data, status) {
success()
})
.error(function (data, status) {
failure(status)
});
}
};
var facebookConfigService = function (providerConfigService) {
var facebookEndpoint = "";
this.fetchConfig = function (success, failure) {
providerConfigService.fetchConfig(facebookEndpoint, success, failure)
};
this.updateConfig = function (config, success, failure) {
providerConfigService.fetchConfig(facebookEndpoint, config, success, failure)
};
};
// POTENTIALLY DUPLICATED CODE FOR OTHER VIEWS
// SERVICE REGISTERING我更像一个Java人,所以我会在Java和Spring世界里做这样的事情:
提供endpointUrl作为构造函数参数,然后创建一个工厂类或只声明预配置的bean。
,我在寻找棱角世界中的类似解。我应该使用角斗士的工厂/供应商吗?如果是这样的话,怎么做呢?可能是直截了当的,但我对angular的服务/控制器/工厂/提供者很困惑。
发布于 2015-04-07 20:21:20
通常,在角度世界中,您会尝试并使用ng-资源。如果您的API是RESTful和basic,我会推荐ng资源。如果没有,那么您所做的一切都是可以的,但是通常这些获取和放置只是在提供服务本身之内。你只是在干涸成功和失败,但现实是,这些可能是不同的。
发布于 2015-04-07 20:43:04
您可以使用工厂(阅读更多)并在控制器中配置它。您还可以通过使用承诺来改进流程,而不是传递回调。
angular.module('yourapp')
.factory('configFactory', function ($http) {
return {
endpointURL: "", // this is what you modify
fetchConfig: function () {
$http.get(this.endpointURL)
},
updateConfig: function (config) {
$http.put(this.endpointURL, config)
}
};
})
//and your controller
.controller('someCtrl', function($scope, configFactory){
configFactory.endpointURL = 'http://customurl.com';
// configFactory will use the endpointURL defined by this controller
$scope.fetchConfig = function(){
configFactory.fetchConfig().then(function(){}).catch(function(){});
}
})
// and another
.controller('someCtrl', function(configFactory){
configFactory.endpointURL = 'http://anotherurl.com
})发布于 2015-04-08 10:55:41
好的,最后我得到了以下内容:
我的ng-资源:
var ConfigurationResource = function ($resource, endpointUrl) {
var allowedMethods = {
'get': {
method: 'GET'
},
'update': {
method: 'PUT'
}
};
return $resource(endpointUrl, {}, allowedMethods);
};
var FacebookProperties = function ($resource) {
return ConfigurationResource($resource, 'my.facebook.endpoint.url');
};在我的控制器中复制代码有一个问题,所以现在看起来如下所示:
var PropertiesController = function (scope, propertiesResource) {
this.fetchProperties = function () {
propertiesResource.get(function (fetchedProperties) {
scope.properties = fetchedProperties;
});
};
this.updateProperties = function () {
propertiesResource.update(scope.properties)
};
scope.properties = {};
scope.fetchProperties = this.fetchProperties;
scope.updateProperties = this.updateProperties;
scope.fetchProperties();
};
var facebookConfigController = function ($scope, FacebookProperties) {
new PropertiesController($scope, FacebookProperties);
};也许这不是正确的方法,但至少它是有效的,几乎没有样板。
https://stackoverflow.com/questions/29500275
复制相似问题