2015-05-28 2 views
1

У меня есть две функции на заводеAngularJS: Как вызвать функцию на заводе?

Вот код

.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 но когда я проверил значение Рез под бревнами. это показывается неопределенным.

Любая идея? как это сделать?

Благодаря

+0

Может быть, вы не вызвать функцию ABC, как getArticles.abc() и называем это без исправить этот контекст? – Mikalai

+0

Я могу позвонить abc. –

+0

Я попытался сказать, что вы можете передать функцию getArticles.abc в обратном вызове, и он может вызывать без правильного контекста. – Mikalai

ответ

0

Да так же, как г-н 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(); 
0

Всегда, разделяйте проблемы.

.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 
    } 
}); 

В операторе возврата вы можете в основном выставить только те методы, которые вы бы потребляли.

2

@ Ответ 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); 

}()); 
Смежные вопросы