$provide.decorator 是angular 提供的一个功能。
目的是让我们可以扩展或装修我们的服务.
var app = angular.module("app", []); app.factory("firstService", function () { return { data: "5" } }); app.factory("secondService", function () { return { data: "5" } }); app.config(["$provide", function ($provide) { $provide.decorator('firstService', ["$delegate", "secondService", function (originalFirstService, secondService) { log(secondService); //也可以注入其它服务 log(originalFirstService.data); //5 originalFirstService.data2 = 10; return originalFirstService; //也可以return a new service }]); }]); app.controller("ctrl", ["$scope", "firstService", function ($scope, firstService) { log(firstService.data2); //10 }]);
在 app.config 时写好逻辑代码,当service被注入创建时就会经过decorator后才输出最终的服务。
一个服务可以被装修多次,$provide.decorator 会把逻辑装入array,在初始化的时候for loop 来装修。