5

Ich habe Tests für einige Winkelkomponenten zu schreiben, mit einer Syntax, die ich auf Google vor einiger Zeit gefunden:Bedeutung von Unterstrichen auf injizierbaren in Winkel

describe('Directive: myDir', function() { 
    beforeEach(module('myApp')); 
    beforeEach(module('app/views/my_template.html')); 
    beforeEach(inject(function ($rootScope, _$compile_, $templateCache) { 
     $templateCache.put('views/my_template.html', $templateCache.get('app/views/my_template.html')); 

     var scope, $compile; 
     scope = $rootScope; 
     $compile = _$compile_; 
     element = angular.element("<div my-dir class='my-dir'></div>"); 
    })); 

    it('does things', function() { 
     $compile(element)(scope); 
     scope.$digest(); 
    }); 
}); 

Meine Frage ist, und zwar um die Injektion von _$compile_. Wie unterscheidet es sich von nur $compile. Warum sollte ich es so machen? Warum wird $ compile neu definiert, warum kann ich nicht einfach mit einem $ compile kompilieren?

Antwort

12

Vom Angular official tutorial (Prüfstrecke):

Der Injektor ignoriert führende und nachlauf unterstreicht hier (das heißt $ httpBackend). Dies ermöglicht es uns, einen Dienst zu injizieren, ihn dann jedoch an eine Variable mit demselben Namen wie der Dienst anzuhängen.

In Ihrem Beispiel könnten Sie die Variable $compile als, sagen wir, compile umbenennen und dann die Unterstrichen aus dem Parameternamen entfernen. In der Tat, haben Sie das getan, um scope so $rootScope blieb unterstreichungsfrei.

Persönlich möchte ich den Namen von Angular Built-in-Diensten in meinen Tests behalten, damit sie leicht entdeckt werden können, während Sie den Code durchfliegen.

+0

https://docs.angularjs.org/api/ngMock/function/angular.mock.inject#resolving-references-underscore-wrapping- – gregjhogan