2016-08-02 8 views
1

Ich muss eine Link-Funktion verwenden, um einige Elemente meines DOM zu manipulieren, aber dafür muss ich einen Dienst verwenden. In der Controller-Funktion weiß ich, wie das geht, aber in der Link-Funktion habe ich keine Ahnung, wie das geht.Wie injiziere ich einen Dienst für eine Link-Funktion?

--EDIT-- Lassen Sie mich setzen mehr klar:

Ich bin mit Winkel-heitlich mit Faltblatt. Aber in Beilage sind die Ereignisse wie unten setzen auf link Funktion werden:

link: function($scope) { 
    $scope.to.marker.on('dragend', function(eventArguments) { 
    var newPosition = eventArguments.target.getLatLng(); 
    $scope.model.geocodes = newPosition; 
    }); 
} 

Das Problem ist, dass ich einen Dienst auf diese injizieren. In der eckigen Form (http://docs.angular-formly.com/docs/formlyconfig) zeigt es mir, dass ich einen Service auf controller: function($scope) injizieren kann, aber geben Sie mir keine Möglichkeit, dasselbe auf link zu tun, und wenn ich die $scope.model.geocodes in der Verbindung ändere, feuert es nicht watcher das setze ich in den Controller meines custom-template.

Ich erwarte, dass ich mich klar gemacht habe.

+0

Dies ist der falsche Ansatz ist. Sie sollten zuerst alle Daten in Ihrem Controller auflösen und dann, falls erforderlich, das dom-Element mit den aufgelösten Werten bearbeiten. Ich gehe davon aus, dass Sie $ scope verwenden, damit Sie damit haken können. Ich würde empfehlen, ControllerAs Syntax zu verwenden. Bei Angular 1.5.x sollten Sie idealerweise eine Komponente verwenden und das injizierbare $ -Element verwenden und sich darauf verlassen, dass Ihre Ansicht Änderungen in dom berücksichtigt. Viele Ansätze sind jedoch gültig, nur meine persönliche Präferenz. – zilj

+1

@musefan Ich habe es verstanden als "Wie verwende ich einen Dienst in der Link-Funktion einer Richtlinie" – zero298

Antwort

3

Ich glaube, Sie es in die Richtlinie injizieren kann und in die Link-Funktion erfassen:

function SomeDirective(SomeService){ 
    return{ 
     link:function(){ 
      SomeService.something(); 
     } 
    } 
} 

SomeDirective.$inject = [ 
    "SomeService" 
]; 

angular 
    .module("some-module") 
    .directive("some", SomeDirective); 
Verwandte Themen