我正在尝试使用服务将数据从一个控制器传递到另一个控制器,但无论我在尝试什么,它总是在第二个控制器上返回'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
}]);
这是简单的代码,不幸的是我现在已经挣了几个小时,有什么建议吗?感谢。
答案 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
});
});