2016-05-06 4 views
0

Ich habe den folgenden Dienst mit AngularJS definiert:Wie kann ich eine Angular-Funktion von einer anderen innerhalb desselben Dienstes aufrufen?

myApp.factory('utilitiesService', 
    function ($filter) { 
     return { 
     myFuncA: function (inArg) { 
      return "XXXX"; 
     }, 

     myFuncB: function (inObj) { 
      inObj.c = "CCCC"; 
      inObj.d = "dddd"; 
      inObj.newFunc = function() { 
      return utilitiesService.myFuncA(
       this.c, 
       this.d 
      ); 
      }; 
      return inObj; 
     } 
     }; 
    } 
); 

Von außerhalb dieses Dienstes, ich myFuncA() von utilitiesService und dann utilitiesService.myFuncA("blah blah blah");

jedoch einfach Injektion nennen kann myFuncB() die gleiche Art und Weise versagt Aufruf zu tun, weil es sagt es weiß nicht über utilitiesService. Wie kann ich auf myFuncA() innerhalb von myFuncB()inObj.newFunc() zugreifen?

Bitte beachte, dass ich nicht utilitiesService als this in der Definition von newFunc() weil in diesem Zusammenhang verweisen kann, ist thisinObj.

+2

haben Sie versucht, 'this.myFunA'? –

+0

Ich habe wichtige Änderungen an der Frage vorgenommen, die Ihre Antwort erheblich verändern wird. Entschuldigen Sie die Unannehmlichkeiten. –

Antwort

2

Dies ist ein Weg, dies zu tun:

myApp.factory('utilitiesService', 
    function ($filter) { 
     service = {}; 

     service.myFuncA = function (inArg) { 
     return ("XXXX" + inArg); 
     }; 
     service.myFuncB = function (inObj) { 
     inObj.c = "CCCC"; 
     inObj.d = "dddd"; 
     inObj.newFunc = function() { 
      return service.myFuncA(
      this.c, 
      this.d 
     ); 
     }; 
     return inObj; 
     }; 

     return service; 
    } 
); 
+0

Ich habe wichtige Änderungen an der Frage vorgenommen, die Ihre Antwort erheblich verändern wird. Entschuldigen Sie die Unannehmlichkeiten. –

+1

Nur damit du weißt, dass du inArg mit inObj in deinem 'service.myFuncB' gemischt hast :) – thepio

4

Update:

myApp.factory('utilitiesService', 
    function($filter) { 
    return { 
     myFuncA: function(inArg) { 
     return "XXXX"; 
     }, 

     myFuncB: function(inObj) { 
     var that = this; 
     inObj.c = "CCCC"; 
     inObj.d = "dddd"; 
     inObj.newFunc = function() { 
      return that.myFuncA(
      this.c, 
      this.d 
     ); 
     }; 
     return inObj; 
     } 
    }; 
    } 
); 
myApp.factory('utilitiesService', 
    function($filter) { 

    function myFuncA(inArg) { 
     return "XXXX"; 
    }; 

    function myFuncB(inObj) { 
     inObj.c = "CCCC"; 
     inObj.d = "dddd"; 
     inObj.newFunc = function() { 
     return myFuncA(
      this.c, 
      this.d 
     ); 
     }; 
     return inObj; 
    } 

    return { 
     myFuncA: myFuncA, 
     myFuncB: myFuncB 
    } 
    }); 

können Sie tun:

myApp.factory('utilitiesService', 
    function($filter) { 
    return { 
     myFuncA: function(inArg) { 
     return ("XXXX" + inArg); 
     }, 

     myFuncB: function(inArg) { 
     return ("YYYY" + this.myFuncA(inArg)); 
     } 
    }; 
    } 
); 

oder wenn diese Funktion hängt nicht von dem Kontext:

myApp.factory('utilitiesService', 
    function($filter) { 

    function myFuncA(inArg) { 
     return ("XXXX" + inArg); 
    } 

    function myFuncB(inArg) { 
     return ("YYYY" + myFuncA(inArg)); 
    } 

    return { 
     myFuncA: myFuncA, 
     myFuncB: myFuncB 
    }; 
}); 
+0

Ich habe wichtige Änderungen an der Frage vorgenommen, die Ihre Antwort erheblich verändern wird. Entschuldigen Sie die Unannehmlichkeiten. –

+0

@ Brians Antwort oben tat. Vielen Dank. –

0
myApp.factory('utilitiesService', 
    function() { 
    return { 
     myFuncA: myFuncA, 
     myFuncB: myFuncB 
    }; 

    function myFuncA(inArg) { 
     return "XXXX"; 
    } 

    function myFuncB(inObj) { 
     inObj.c = "CCCC"; 
     inObj.d = "dddd"; 
     inObj.newFuncVal = function() { 
     return myFuncA(this.c, this.d); 
     }; 

     return inObj; 
    } 
    } 
); 
Verwandte Themen