2015-06-23 27 views
0

我有这样的代码跟工厂:无法从工厂数据传递到控制器

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 

我失去了什么?

回答

2

忘记用在工厂方法回报,现在它应该工作:)

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]; 
     } 
    } 

}) 
+0

非常感谢您的回答! –

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]; 
     } 
    } 

}); 

这应该有所斩断。

+0

非常感谢您的回答! –

+0

请关闭这个问题:)(并让我赚取一些积分;)) –

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) 
+0

非常感谢您的回答! –

+0

@TuviaKhusid没问题Tuvia,很高兴帮助:) :) –

相关问题