簡體   English   中英

AngularJS:如何在工廠內調用函數?

[英]AngularJS : How to call a function within factory?

我在工廠有兩個功能

這是一些代碼

.factory('getArticles', function ($http, $q) {
   return {
       abc : function() {
        var deferred = $q.defer();
        // my code 
            res= this. bcd();
            console.log(res); // undefined
          deferred.resolve(res);

          return deferred.promise;
       },
       bcd: function() {

        //some codee 

         return res; 

       }
   }

});

現在從控制器我調用abc函數,但當我檢查日志下res的值。 這顯示未定義。

任何想法 ? 這個怎么做 ?

謝謝

@ Vineet的答案對於實例化的服務是正確的,但工廠應該只返回一個對象。

我喜歡@ peek4y的答案,但它可以進一步改進,仍然有abc()私有:

(function () {
'use strict';

var getArticles = function ($http, $q) {

  function bcd() {
    var res;
    // some logic
    return res;
  }

  function abc() {
    var deferred = $q.defer();
    var res = bcd();
    console.log(res); 
    deferred.resolve(res);
    return deferred.promise;
  }

  //return only the functions you want to expose

  return {
    abc: function () {
      return abc();
    }
  }
});

angular.module('myApp')
  .factory('getArticles', getArticles);

}());

總是,將問題分開。

.factory('getArticles', function ($http, $q) {

  function abc() {
    var deferred = $q.defer();
    res= bcd();
    console.log(res); 
    deferred.resolve(res);
    return deferred.promise;
  }

  function bcd() {
    //some logic
    //Make sure your logic is returning proper value.
    return res;
  }


  //return only those functions you want to expose
  return {
    abc: abc
  }
});

在return語句中,您基本上只公開那些您將使用的方法。

是的,正如luschn先生所說,但您可以通過更改如下定義來從控制器調用您的工廠/服務功能。 您應該在工廠中使用this引用定義您的函數

.factory('getArticles', function ($http, $q) {

       this.abc = function() {
        var deferred = $q.defer();
        // my code 
            res= this. bcd();
            console.log(res); // undefined
          deferred.resolve(res);

          return deferred.promise;
       }

       this.bcd = function() {

        //some codee 

         return res; 

       }

});

在您的控制器中,您可以打電話

getArticles.abc()

如果您需要從另一個工廠函數調用中調用工廠的函數

this.bcd();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM