Angularjs无法从服务中获取数据

时间:2016-01-21 18:08:38

标签: angularjs service controller

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

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

这是controller1:

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

然后是controller2:

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

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

}]);

这是简单的代码,不幸的是我现在已经挣了几个小时,有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:0)

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

this在Javascript中的行为与其他语言不同。

答案 1 :(得分:0)

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

要隔离问题,您是否可以从myService的定义中删除依赖项,并查看是否可以使其工作?加载小提琴后,请查看控制台。

$(".menubar")
.on("mouseenter", function(){
    $(this).find(".clasi").css({
        paddingTop: '35px',
        opacity: 1
    });
})
.on("mouseleave", function(){
    $(this).find(".clasi").css({
        paddingTop: '10px',
        opacity: 0.6
    });
});