Mat*_*awk 22 overriding extend promise angularjs angularjs-service
我在AngularJS的自定义服务中编写了这个小代码.
在我的服务中:
var deferred = $q.defer();
var promise = deferred.promise;
deferred.resolve('success');
deferred.reject('error');
/* Handle success and error */
promise.success = function(fn) {
promise.then(function(response) {
fn(response);
});
return promise;
};
promise.error = function(fn) {
promise.then(null, function(response) {
fn(response);
});
return promise;
};
Run Code Online (Sandbox Code Playgroud)
在我的控制器中:
promiseService.myPromise()
.success(function(data){
$scope.success= data;
})
.error(function(data){
$scope.error = data;
});
Run Code Online (Sandbox Code Playgroud)
我juste处理承诺的成功和错误($ q服务).我需要在很多其他服务中使用此代码,因此我希望使用自定义直接扩展$ q服务.
所以在我的服务中我想要这样的东西:
var deferred = myPromiseService.$qCustom.defer();
var promise = deferred.promise;
deferred.resolve('success');
deferred.reject('error');
return promise;
Run Code Online (Sandbox Code Playgroud)
任何的想法?我发现在Angularjs中扩展过滤器的一些解释我的问题是找到扩展$ q的所有功能并添加我的自定义的好方法.
我从类似的东西开始,处理$ q开箱即用:
angular.module('myApp').service('myPromiseService', function($q){
$qCustom = $q;
});
Run Code Online (Sandbox Code Playgroud)
Jos*_*fer 27
这是@jessegavin离职的完整解决方案.
var myApp = angular.module("myApp", []);
myApp.config(function ($provide) {
$provide.decorator('$q', function ($delegate) {
var defer = $delegate.defer;
$delegate.defer = function () {
var deferred = defer();
deferred.promise.success = function (fn) {
deferred.promise.then(function(response) {
fn(response.data, response.status, response.headers);
});
return deferred.promise;
};
deferred.promise.error = function (fn) {
deferred.promise.then(null, function(response) {
fn(response.data, response.status, response.headers);
});
return deferred.promise;
};
return deferred;
};
return $delegate;
});
});
Run Code Online (Sandbox Code Playgroud)
jes*_*vin 11
如果要更改由angular注入的内容的默认行为,可以decorator()在$provide服务上使用该方法.
var myApp = angular.module("myApp", []);
myApp.config(function ($provide) {
$provide.decorator("$q", function($delegate) {
// The $delegate argument here refers to the $q service.
$delegate.defer = function() {
alert("You just tried to call defer()!");
};
// Now, every time angular provides an instance of $q via
// injection, it will return your customized version of $q.
return $delegate;
});
});
Run Code Online (Sandbox Code Playgroud)
请参阅上面的示例http://plnkr.co/edit/RuZF2cGkVHwlu7NIhxEZ?p=preview
至于修改$q添加成功和错误功能,我目前还不确定.但我很确定这是你想要的地方.
| 归档时间: |
|
| 查看次数: |
8294 次 |
| 最近记录: |