[英]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.