Angularjs无法从服务中获取数据

问题描述:

我试图使用服务将数据从一个控制器传递到另一个控制器,但无论我在尝试什么,总是会在第二个控制器上返回'undefined'。这里是我的服务:Angularjs无法从服务中获取数据

app.service('myService', ['$rootScope', '$http', function ($rootScope, $http) { 
var savedData = {} 

this.setData = function (data) { 
    savedData = data; 
    console.log('Data saved !', savedData); 
} 

this.getData = function get() { 
    console.log('Data used !', savedData); 
    return this.savedData; 
} 
}]); 

这里是控制器1:

.controller('HomeCtrl', ['$scope','$location','$firebaseSimpleLogin','myService','$cookies','$window', function($scope,$location, $firebaseSimpleLogin, myService, $cookies, $window) { 
loginObj.$login('password', { 
      email: username, 
      password: password 
     }) 
     .then(function(user) { 
      // Success callback 
      console.log('Authentication successful'); 
      myService.setData(user); 
      console.log('myservice:', myService.getData()); // works fine 
}]); 

然后控制器2:

// Dashboard controller 
.controller('DashboardCtrl', ['$scope','$firebaseSimpleLogin','myService',function($scope,$firebaseSimpleLogin, $location, myService) { 

    console.log('myservice:', myService.getData()); //returns undefined 

}]); 

即简单的代码,不幸的是我一直在苦苦挣扎了几个小时,有什么建议?谢谢。

+0

您是否也在控制台中看到'Data used !'? –

+0

我看到的唯一区别是在第一个例子中,'setData'方法在'then'块中被调用。你可以在第二个控制器中尝试吗? – frishi

+0

是的,我得到数据使用!在从控制器1使用它时在控制台中,但不从控制器2中使用。而且我试图在block中获取数据,因为与controller1中的请求相同,这仍然不起作用。 – elyanno

在这里创造一个小提琴: http://jsfiddle.net/frishi/8yn3nhfw/16

找出问题,您可以删除自定义的依赖关系为myService并看看是否有工作?加载小提琴后查看控制台。

var app = angular.module('app', []) 
.service('myService', function(){ 
    this.getData = function(){ 
    return "got Data"; 
    } 
}) 

我认为问题在于您在服务中返回this.savedData。尝试返回savedData

this在Javascript中表现与其他语言不同。

+0

即使没有这个。它不起作用,我在阅读关于主题的其他帖子后实际添加了它,但它没有改变结果。 – elyanno