【发布时间】:2016-10-30 08:25:00
【问题描述】:
我无法让我的自定义角度服务正常工作。
我的服务如下:
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 []
});
编辑 我的一些代码很模糊,添加了我的路线部分,应该更清楚一点。 编辑 2 忘了提一下,如果我在 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 请求完成后请求数据吗?请分享 minimal reproducible example 显示控制器何时初始化。
-
console.log将在创建控制器时执行,并且只有一次,当您的应用程序运行时。那时你在数组中没有任何东西。您的应用程序可能没问题,但您只是没有正确访问数组。 -
嗯,虽然我使用的是角度路由,但这是否意味着稍后会实例化第二个控制器?
-
@TimHobbs "当控制器被创建时,并且只有一次,当你的应用运行时" - 没有。控制器以 on demand 方式进行初始化。如果在切换到不同的路由时需要第二个控制器(可能在 AJAX 请求之后),它将在那时初始化。
-
@intrinsiciwnl 阅读了我上面的评论。正如我在之前的评论中提到的,在minimal reproducible example 中显示控制器是如何初始化的。
标签: angularjs angularjs-scope angularjs-controller