2015-07-14 6 views
5

Dies ist Code-Snippet, das mein Problem erschafft:3rd-Party-Richtlinie in einer anderen Richtlinie bei der Verwendung von "Controller als ..." Syntax

html:

... 
<div ng-controller="worker as workerCtrl"> 
    <my-directive label="label" controllerAs="workerCtrl" function="fileUpload(e, this.options)"></my-directive> 
</div> 

Controller:

... 
function fileUpload(file, options){...} 
... 

Direktive:

function myDirective($compile) { 

    var directive = { 
     restrict: 'E', 
     link: link 
    }; 
    return directive; 

    function link(scope, element, attrs) { 
     var htmlText = '<lx-file-input ' + 
      'change="'+attrs.controllerAs+'.'+attrs.uploadFunction+'" ' + 
      'label="'+attrs.label+'"></lx-file-input>'; 
     element.replaceWith($compile(htmlText)(scope)); 
    } 
} 

Sollte sein: (‚lx-Datei-input‘ ist ein 3rd-Party-Richtlinie ...)

<lx-file-input change="workerCtrl.fileUpload(e, this.options)" label="someLabel"</lx-file-input> 

Das Problem ist, dass der Zeitpunkt der Winkel Kompilieren und Linken ausgeschaltet ist, und die Vorlagen bleibt mit HTML String anstelle der kompilierten Funktion. Ich weiß, es wird funktionieren, wenn ich den Controller in der Richtlinie festgelegt werden, aber ich will es die gleiche Funktion in dem gleichen aus der HTML-Rahmen ‚workerCtrl‘ verwenden.

Antwort

1

Zuerst können Sie versuchen, die Funktion von außen wie die on-close im offiziellen Angular guide übergeben.

<div ng-controller="Controller"> 
    {{message}} 
    <my-dialog ng-hide="dialogIsHidden" on-close="hideDialog(message)"> 
    Check out the contents, {{name}}! 
    </my-dialog> 
</div> 

Aber ich sehe nicht, warum Sie sollten nicht eine Brückenfunktion im Rahmen Ihrer Richtlinie erstellen, die auf die gewünschte Funktion fordert. Ich würde diesen Weg bevorzugen.

Vor kurzem hatte ich fast die gleiche answer wie Sie gerade geschrieben haben. Sie können dort auch andere nützliche Beiträge finden.

+0

// HackMagicDragonsBeHere Was über eine schreckliche 2-Schritt Instanziierung? Erstellen eine temporäre Direktive, die die Controller-Funktion analysiert und ersetzt sich mit einer Richtlinie, die in der 3rd-Party-Richtlinie tatsächlich bringt. : D Ich frage mich nur, ob es funktionieren würde ... –

Verwandte Themen