无法将数据从工厂传递到控制器

时间:2015-06-23 06:47:17

标签: angularjs

我的工厂代码是这样的:

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

我缺少什么?

3 个答案:

答案 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)