我的工厂代码是这样的:
angular.module("mainApp", ["kendo.directives"])
.factory("getFormats", function() {
var searchStr="list&John&1&1".substr(1);
//Here I see the searchStr
return {
isType: function(){
searchStr.split('&')[0];
//Here I see the searchStr
},
username: function(){
searchStr.split('&')[1];
},
dateFormatIndex: function(){
searchStr.split('&')[2];
},
languageIndex: function(){
searchStr.split('&')[3];
}
}
})
.controller("ValidationListCtrl", function( $scope,getFormats) {
var isType=getFormats.isType(); //Here I see the undefined
var username=getFormats.username();//Here I see the undefined
var dateFormatIndex=getFormats.dateFormatIndex();//Here I see the undefined
var languageIndex=getFormats.languageIndex();//Here I see the undefined
}
但我在控制器中得到的所有变量都是未定义的。当我在控制器中获取它时,我也检查了工厂,并用空对象
查看它 Object {}dateFormatIndex: (){arguments: nullcaller: nulllength: 0name: ""prototype: dateFormatIndex__proto__: Empty() {}<function scope>isType: (){languageIndex: (){username: (){__proto__: Object
我缺少什么?
答案 0 :(得分:2)
忘记在工厂方法中使用return,现在它应该工作:)
angular.module("mainApp", ["kendo.directives"])
.factory("getFormats", function() {
var searchStr="list&John&1&1".substr(1);
return {
isType: function(){
return searchStr.split('&')[0];
},
username: function(){
return searchStr.split('&')[1];
},
dateFormatIndex: function(){
return searchStr.split('&')[2];
},
languageIndex: function(){
return searchStr.split('&')[3];
}
}
})
答案 1 :(得分:2)
您没有在工厂内的任何方法中返回值。做类似以下的事情:
angular.module("mainApp", ["kendo.directives"])
.factory("getFormats", function() {
var searchStr="list&John&1&1".substr(1);
//Here I see the searchStr
return {
isType: function(){
return searchStr.split('&')[0];
//Here I see the searchStr
},
username: function(){
return searchStr.split('&')[1];
},
dateFormatIndex: function(){
return searchStr.split('&')[2];
},
languageIndex: function(){
return searchStr.split('&')[3];
}
}
});
这应该可以解决问题。
答案 2 :(得分:1)
另一种方法是你可以使用模块化/显示模块模式,这有助于封装以及代码可读性,如下所示
angular.module("mainApp", ["kendo.directives"])
.factory("getFormats", function() {
var _searchStr="list&John&1&1".substr(1),
_isType = function(){
return _searchStr.split('&')[0];
},
_username = function(){
return _searchStr.split('&')[1];
}
.....
return {
isType :_isType ,
username:_username
.....
}
})
所以在您的控制器或其他服务中,您可以将其作为
getFormats.username(//arguments if required)
username.isType(//arguments if required)