angularjs服务中未定义的对象

时间:2016-06-20 08:31:06

标签: javascript jquery angularjs

我想将数据从控制器1共享到另一个控制器

我的第二个控制器中出现未定义的错误。有人能告诉我我的代码有什么问题吗?

服务

app.service('var_transfer_service', function(){
       var test_var;              

          return {
             getVar: function () {
                return test_var;
           },
             setVar: function( _test_var ) {
                test_var = _test_var; 
                console.log(test_var);//show the object content in my console
            }
        }
   })

控制器1

app.controller('homeCtrl', function($scope,$http, $filter ,var_transfer_service){
$scope.search_item = function ($event,item){
         console.log(item)
         var latt = item.lat;
         var lngt = item.lng;

         var_transfer_service.setVar(item); 
     }       

});

控制器2

 app.controller('MapCtrl',function($scope,var_transfer_service, $state, $cordovaGeolocation) {
    var transferred_var = var_transfer_service.getVar();
    console.log(transferred_var); //undefined object
 });

2 个答案:

答案 0 :(得分:1)

未定义,因为它未初始化:

var test_var;

你只在setVar函数上设置一个值,该函数在secound控制器的$ scope.search_item函数中调用(你从不调用)。

你的缩进行为是什么?

答案 1 :(得分:0)

您使用了服务,但写了一个工厂。

Angular服务返回函数实例,因此将函数放在函数作用域上,使用" this"。

使用服务:

app.service('var_transfer_service', function(){
    var test_var;              
    this.getVar = function () {
        return test_var;
    };
    this.setVar = function( _test_var ) {
        test_var = _test_var; 
        console.log(test_var);//show the object content in my console
    }
}   

基本上,角度服务返回函数本身,但工厂返回函数的返回值 - 所以,你写了一个工厂。

如果您使用app.factory

,那么您的代码就可以使用了
app.factory('var_transfer_service', function(){
       var test_var;              

          return {
             getVar: function () {
                return test_var;
           },
             setVar: function( _test_var ) {
                test_var = _test_var; 
                console.log(test_var);//show the object content in my console
            }
        }
   })