繁体   English   中英

Angular $ http调用

[英]Angular $http calls

我对javascript领域特别是Angular非常陌生。 我有一个关于$ http调用joomla服务器的问题,该服务器使用K2的"format=json" URL扩展名具有非常基础的REST服务。 K2 joomla json输出的工作方式是,您只需在网址末尾附加"format=json"https://examplesite.com/category-1?format=json : https://examplesite.com/category-1?format=json "format=json"现在可以正常工作,但我不禁要想一想如果我想要一个页面来显示类别1的文章,而另一个页面要显示类别2的文章,然后又有100个类别,那么我每次都要进行单独的$ http调用:

angular.module('TNA.servicesEastc', [])

.factory('Eastc', function ($http) {
    var eastc = [];
       storageKey = "eastc";

    function _getCache() {
        var cache = localStorage.getItem(storageKey );
        if (cache)
            eastc = angular.fromJson(cache);
    }


    return {
        all: function () {
            return $http.get("http://examplesite.com/category-1.html?format=json").then(function (response) {
                eastc = response.data.items;
                console.log(response.data.items);
                return eastc;
            });
        },

        getNew: function () {
            return $http.get("http://examplesite.com/category-1.html?format=json").then(function (response) {
                eastc = response.data.items;
                return eastc;
            });
        },

        get: function (eastCId) {
            if (!eastc.length) 
                _getCache();
            for (var i = 0; i < eastc.length; i++) {
                if (parseInt(eastc[i].id) === parseInt(eastCId)) {
                    return eastc[i];
                }
            }
            return null;
        }
    }
});

还有一个

angular.module('TNA.servicesWestc', [])

.factory('Westc', function ($http) {
    var westc = [];
       storageKey = "westc";

    function _getCache() {
        var cache = localStorage.getItem(storageKey );
        if (cache)
            westc = angular.fromJson(cache);
    }


    return {
        all: function () {
            return $http.get("http://examplesite.com/category-2.html?format=json").then(function (response) {
                westc = response.data.items;
                console.log(response.data.items);
                return westc;
            });
        },

        getNew: function () {
            return $http.get("http://examplesite.com/category-2.html?format=json").then(function (response) {
                westc = response.data.items;
                return westc;
            });
        },

        get: function (westCId) {
            if (!westc.length) 
                _getCache();
            for (var i = 0; i < westc.length; i++) {
                if (parseInt(westc[i].id) === parseInt(westCId)) {
                    return westc[i];
                }
            }
            return null;
        }
    }
});

等等...

同样,必须制造大量的控制器来处理所有这些问题。

对我来说,这似乎不太容易维护,所以我想知道是否有更有效的方法来解决这个问题?

您必须使类别编号成为变量,然后从中构建查询。

在这里查看示例

从主题中提取的解决方案:

factory('Facedetect', function ($resource) {

   return $resource('skyBiometry/facedetect', {}, {   
       query: { method: 'GET', params: {imageUrl:"http://cdn1-public.ladmedia.fr/var/public/storage/images/dossiers/portrait_w674.jpg"}, isArray: false }
       }) 
  });


function IndexCtrl($scope,$routeParams,Facedetect) {
    $scope.imageurl = 'http://flepi.net/images/personne-tendue.jpg';
    $scope.text = $scope.text = Facedetect.get({imageUrl: $scope.imageurl});
}

使用这样的东西:

app.service(
"angularPostService",
['$http', '$q', function($http, $q) {

    return({
        serve: serve
    });

    function serve(data, url) {
        var request = $http({
            method: 'post',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            },
            url: url,
            data: data
        });

        return( request.then( handleSuccess, handleError ) );

    }
    function handleError( response ) {
        if (! angular.isObject( response.data ) || ! response.data.message) {
            return( $q.reject( "An unknown error occurred." ) );
        }
        return( $q.reject( response.data.message ) );
    }
    function handleSuccess( response ) {
        return( response.data );
    }
}]

);

这将为您提供发出http请求的服务。 在任何控制器中注入此服务,并使用来自angular的http ajax调用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM