首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >很少有角度服务,只是常量不同

很少有角度服务,只是常量不同
EN

Stack Overflow用户
提问于 2015-04-07 20:02:58
回答 3查看 58关注 0票数 0

我对angularjs非常陌生,我需要做以下工作:我几乎没有部分视图,每个视图都包含简单的配置表单,需要将其获取/放到服务器上。

每个视图都有一个控制器,每个控制器都有一个相应的服务,负责对给定的后端端点执行GET/PUT请求。

服务现在只在端点url中不同。

问题是:如何避免以下情况?

代码语言:javascript
复制
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的服务/控制器/工厂/提供者很困惑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-07 20:21:20

通常,在角度世界中,您会尝试并使用ng-资源。如果您的API是RESTful和basic,我会推荐ng资源。如果没有,那么您所做的一切都是可以的,但是通常这些获取和放置只是在提供服务本身之内。你只是在干涸成功和失败,但现实是,这些可能是不同的。

票数 1
EN

Stack Overflow用户

发布于 2015-04-07 20:43:04

您可以使用工厂(阅读更多)并在控制器中配置它。您还可以通过使用承诺来改进流程,而不是传递回调。

代码语言:javascript
复制
   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
   })
票数 1
EN

Stack Overflow用户

发布于 2015-04-08 10:55:41

好的,最后我得到了以下内容:

我的ng-资源:

代码语言:javascript
复制
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');
};

在我的控制器中复制代码有一个问题,所以现在看起来如下所示:

代码语言:javascript
复制
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);
};

也许这不是正确的方法,但至少它是有效的,几乎没有样板。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29500275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档