【问题标题】:how to write controller for this service?如何为此服务编写控制器?
【发布时间】:2023-03-13 09:40:01
【问题描述】:
myapp.factory('serviceName', function( $http, webStorage){

    var factory = {};
    var resoureurlBase=some base url;

    factory.genericService = function(method, payload, methodName, callbackFn, callbackError, param) {

            var httpRequest = null;
            if (param && param == true) {
                httpRequest = $http({
                    url: resoureurlBase+methodName,
                    method: method,
                    params: payload,
                    headers: {
                        'Content-Type': 'application/json'
                    }
                });
            } else {
                httpRequest = $http({
                    url: resoureurlBase+methodName,
                    method: method,
                    data: payload,
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    }
                });
            }

            httpRequest.then(function(response) {
                    if (callbackFn && callbackFn.call) {
                        callbackFn.call(null, response);
                    }
                },
                function(response) {
                    if (callbackError && callbackError.call) {
                        callbackError.call(response);
                    }
                });
            httpRequest.error(function(data, status, headers, config) {

            });
        };
        return factory;
});

/* 我已经编写了像上面这样的服务我如何在控制器中处理 我的意思是 如何在控制器中编写回调函数 如何注入 等等。

*/

【问题讨论】:

    标签: angularjs callback angularjs-service


    【解决方案1】:

    简单的 DI(依赖注入)到你的控制器中:-

    myapp.controller('myCtrl',['$scope','serviceName',function($scope,serviceName){
    
    // use serviceName to call your factory function
    }]);
    

    参考:-https://docs.angularjs.org/guide/di

    【讨论】:

    • 感谢 squiroid 的快速响应,但我想实现回调函数,我该怎么做?
    【解决方案2】:

    你需要像这样调用服务

    serviceName.genericService(--parmas--).then(function(d){
    //success
    }) 
    

    因为来自服务serviceName,您返回的承诺只需要使用.then 来解决。

    控制器

    var mainController = function($scope, serviceName) {
      var callbackFn = function() {
      console.log('Success');
      }
      var callbackError = function() {
      console.log('Error');
      }
    
      var parameter = {
          param1: 1
      },
      method = 'something', payload = 100, methodName = 'something';
      serviceName.genericService(method, payload, methodName, callbackFn, callbackError, parameter).then(
        //success function
        function(data) {
            //call after call succeed
        },
        //error function
        function(error) {
            //call after call error 
        });
    };
    
    myapp.controller('mainController', ['$scope', 'serviceName', mainController()];
    

    希望这可以帮助你。谢谢。

    【讨论】:

    • @Ravindhar Konka 我的回答对你有帮助吗?
    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2011-11-01
    • 2016-12-04
    相关资源
    最近更新 更多