我在使自定义角度服务工作时遇到问题。在控制器从服务异步获取/设置数据之间共享数据 - AngularJS
我的服务如下:
app.service('userService', function(){
var user = [];
var setUser = function(newObj){
user.push(newObj);
};
var getUser = function(){
return user;
};
return {
setUser: setUser,
getUser: getUser
};
});
app.config(function($routeProvider,$locationProvider) {
$routeProvider
.when('/', {
templateUrl : 'views/home.html',
controller : 'indexController'
})
.when('/me.html', {
templateUrl : 'views/me.html',
controller : 'meController'
});
// Get rid of the additional default pound sign during routing
$locationProvider.html5Mode(true);
});
我把它叫做如下
app.controller('indexController', function($http,userService) {
...
$http.post("somewhere")
.then(function(response){
userService.setUser({test: "test});
location="/me.html";
}
.then(function(response){
userService.setUser({test: "test});
location="/me.html";
})
});
当我在另一个控制器做的console.log,它返回一个空数组。我在搞什么?
app.controller('meController',function($http,userService){
console.log(userService.getUser()); => returns an empty array []
});
编辑 我的一些代码是模糊的,加了我的路线部分,应该是一个更加清楚一点。我忘记了,如果我在setUser()之后的行中插入console.log(userService.getUser()),它会正确显示数据。
即
$http.post("somewhere")
.then(function(response){
userService.setUser({test: "test});
location="/me.html";
}
.then(function(response){
userService.setUser({test: "test});
location="/me.html";
console.log(userService.getUser()); => correct output
})
您的代码中有语法错误。你确定在AJAX请求完成后第二个控制器正在请求数据吗?请分享显示控制器何时初始化的[mcve]。 –
'console.log'将在控制器创建时执行,并且只有一次,当您的应用程序运行时。那时你在阵列中没有任何东西。你的应用可能没问题,但你只是没有正确访问阵列。 –
嗯,我使用角度路由,但这并不意味着第二个控制器稍后实例化? – intrinsiciwnl