2016-08-10 5 views
0

Ich verwende angularJS 1.5 component in meiner Anwendung. Beispielcode der Komponente des Controllers als Gebrüll:AngularJS 1.5 Aufruf einer Methode aus einer anderen in der Komponente Controller

function testController() 
{ 
    var vm = this; 
    activate(); // this will be called on first load on component. 

    vm.testMethod = function() 
    { 
     return "test Method"; 
    } 

    function activate() 
    { 
     console.log(vm.testMethod()); 
    } 

wenn ich dies ausführen ich erhalte Fehler

TypeError: vm.testMethod is not a function.

Ich weiß, ich kann eine lokale Funktion erstellen nicht vm. jedoch an den Controller angehängt, in meinem brauche, ich habe eine vm.testMethod() in der Vorlage verwendet, um einige Text zurück zu bekommen, der richtig funktioniert. z.B.

--template code

{{$ctrl.testMethod()}} // This works properly and display 'test Method' on page. 

aus irgendeinem Grund, ich versuche vm.testMethod() in einem anderen Verfahren zu nennen z.B. activate(), aber ein Fehler oben erwähnt bekommen?

Darf ich wissen, ob etwas fehlt oder etwas versucht, was nicht möglich ist.

+0

Wo rufen Sie die Funktion 'activate()' auf? –

+0

Code aktualisiert. Im Grunde wird es bei der Komponentensteuerung aufgerufen. – Kenz

Antwort

1

Ihre Fragen hat nichts mit kantigem :-)

Ihre activate Funktion gehievt zu tun ist, weil es sich um eine Funktion Erklärung ist. Deshalb können Sie es "bevor Sie es geschrieben haben" nennen. ABER, vm.testMethod ist eine Funktion Ausdruck und wird nicht gehisst werden.

Hier ist ein super einfaches Beispiel, das das Problem zeigt Ihr mit:

var vm = {}; 
 

 
console.log(vm.hello); 
 
vm.hello = function() {}; 
 
console.log(vm.hello);

Ich würde Ihnen empfehlen this article für ein besseres Verständnis davon, wie Ausdrücke und Erklärungen arbeiten in JavaScript zu lesen. Auch, um dies zu verhindern wieder sollten Sie this advice from John Papa folgen:

immer Funktionsdeklarationen an der Unterseite des Controllers schreiben und sie an der Spitze zuweisen, wenn Sie Ihre vm Variable definiert.

+0

tatsächlich habe ich diese Option vor dem Stellen der Frage versucht. Ich habe versucht, Positionen dieser Funktionen zu mischen, jedoch bleibt Fehler wie es ist. – Kenz

+0

Nicht alles, was ich denke: P Wenn Sie Ihre 'activate()' unterhalb der 'vm.testMethod'-Zuweisung bewegen, funktioniert es, siehe https://jsbin.com/bacido/edit?js,console –

+0

Bitte geben Sie einen gültigen Link, I sehe dort keinen relevanten Code. – Kenz

Verwandte Themen