javascript Angularjs回调服务(方法链接和自定义回调)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript Angularjs回调服务(方法链接和自定义回调)相关的知识,希望对你有一定的参考价值。

/*global _, angular */

/*
function send() {
  var cb = new Callback("custom");
  SomeService.Send(cb.triggerSuccess, cb.triggerError, cb.triggerCustom);
  return cb.remote();
}

send()
.success(function(data){})
.error(function(data){})
.custom(function(data){})
.complete(function(data){})
*/

angular.module('callbackServices', [])
.factory('Callback', function ($timeout){
  return function(custom){
    var successCallbacks = [];
    var errorCallbacks = [];

    function capitaliseFirstLetter(str) {
      return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
    }

    function invokeCallbacks(callbacks, data) {
      $timeout(function(){
        _.chain(callbacks).compact().each(function(callback) { callback(data); });
      }, 0);
    }

    var baseRemote = {
      chain:function(callback){ return this.success(callback.triggerSuccess).error(callback.triggerError); },
      success: function(callback) { successCallbacks.push(callback); return this; },
      error: function(callback) { errorCallbacks.push(callback); return this; },
      complete: function(callback) { return this.success(callback).error(callback); }
    };

    var base = {
      triggerSuccess:function(response){
        invokeCallbacks(successCallbacks, response);
        return this;
      },
      triggerError:function(response) {
        invokeCallbacks(errorCallbacks, response);
        return this;
      },
      remote: function(){ return baseRemote; }
    };

    var customCallbacks = {};
    function addCustomCallback(key){
      customCallbacks[key] = [];
      baseRemote[key] = function(callback) { customCallbacks[key].push(callback); return baseRemote; };
      base["trigger" + capitaliseFirstLetter(key)] = function (response) { invokeCallbacks(customCallbacks[key], response); };
    }

    if(angular.isArray(custom)){
      _.each(custom, addCustomCallback);
    } else if( angular.isString(custom)){
      addCustomCallback(custom);
    }
    return base;
  };
});

以上是关于javascript Angularjs回调服务(方法链接和自定义回调)的主要内容,如果未能解决你的问题,请参考以下文章

回调范围未访问 AngularJS 服务中的函数

AngularJS 中的Promise --- $q服务详解

在 AngularJS 中设置 JSONP 回调函数

AngularJS - 动画回调/序列

AngularJs 中的两种方式数据绑定不使用异步回调

JavaScript 框架------------AngularJS(下)