2017-12-20 4 views
1

Ich habe dies:

beforeEach(inject(function ($injector, CategoryService) { 

    CategoryService.create = function() { 
    return Promise.resolve({}); 
    }; 

    const $compile = $injector.get('$compile'); 
    const $rootScope = $injector.get('$rootScope'); 
    const $templateCache = $injector.get('$templateCache'); 

})); 

Ich frage mich, ob es einen Weg gibt, etwas zu tun:

beforeEach(inject(function ($injector, CategoryService) { 

    CategoryService.create = function() { 
    return Promise.resolve({}); 
    }; 

    const [$compile, $rootScope, $templateCache] = $injector.get('$compile','$rootScope','$templateCache'); 

})); 
+1

Wie wäre es 'const [$ Kompilierung, $ rootScope, $ templateCache] = [ '$ compile', '$ rootScope', '$ templateCache']. map (svc => $ injector.get (svc)) ' –

+0

schön das würde funktionieren, fühlen Sie sich frei, Antwort hinzuzufügen –

Antwort

0

bei der Dokumentation der Suche:

https://docs.angularjs.org/api/auto/service/$injector

Und ich angemeldet auch die Methoden auf $ Injektor:

'$injector =>', Object{invoke: function invoke(fn, self, locals, serviceName) { ... }, instantiate: function instantiate(Type, locals, serviceName) { ... }, get: function getService(serviceName, caller) { ... }, annotate: function (fn) { ... }, has: function (name) { ... }, strictDi: false} 

sieht nicht so aus, als gäbe es einen Weg, das zu tun. Wahrscheinlich, weil das Destrukturieren von Arrays in den meisten Browsern immer noch eine Transpilation erfordert?

So können Sie eine Hilfsfunktion erstellen, dies zu tun:

const myInjector = $injector => { 
    return function(){ 
     return Array.from(arguments).map(function(a){ 
     return $injector.get(a); 
     }) 
    } 
    }; 

und es zu verwenden, etwa so:

const inj = myInjector($injector); 
const [AcqService, RolesService] = inj('AcqService', 'RolesService'); 
Verwandte Themen