鉴于以下AngularJS:
var app = angular.module('testing',[]);
app.service('auth',function($http)
{
var user = '';
$http.get("http://localhost/auth/user").success(function(data)
{
user = data.user;
console.log("User: " + user); //prints Woot4Moo
});
return{
getUser: function(){
return user;
}
};
});
JSON回复:
{"user":"Woot4Moo"}
在控制器中使用:
app.controller('controller',function($http,auth)
{
$http({
url:"http://localhost/my/rest/call/",
method: "GET",
params: {person: auth.getUser()} //this comes back empty
}).success(function(data){...}
};
重申如何让我的结束网址成为这样:
http://localhost/my/rest/call/?user='Woot4Moo'
而不是像这样的无效:
http://localhost/my/rest/call/?user= <- the empty string
答案 0 :(得分:1)
您正在auth
中进行异步HTTP呼叫。
当应用程序首次启动时,控制器会立即从您的服务请求user
的值并获取设置为空的字符串。只有在调用稍后触发的成功回调时,才会为user
设置值。
你可以这样做:
app.service('auth',function($http)
{
var user;
function queryUser() {
return $http.get("http://localhost/auth/user").then(function(data)
{
user = data.data.user;
return user;
});
}
function getUser() {
return user ? user : queryUser();
}
return{
getUser: getUser
};
});
确保在初次请求用户时调用queryUser
,然后将值缓存到user
后,所有后续调用都将返回缓存值。
如果需要,在服务内部调用函数getUser()
以在初始化时设置值。
我还会考虑更改控制器中的逻辑。立即取决于异步调用可能不是一个好主意!
示例Plunker
答案 1 :(得分:0)
我认为如果你只是想改变最终网址,
$location.url("my/rest/call/?user='"+user+"'");
应该有用。
希望这有帮助