我有一个用c#定义的基本控制器,它的唯一目的是返回当前用户是谁。
namespace ProjectName.Controllers
{
public class UserController : ApiController
{
// GET api/user/
public string Get()
{
return User.Identity.Name;
}
}
}
然后我定义了一个ngResource来查看控制器
cript.factory('User', function ($resource) {
return $resource('/api/User')
});
最后我尝试在我的Angular控制器中获取那个用户
$scope.checkIfAuth = function () {
$scope.user = User.get();
console.log($scope.user);
if ($scope.user === '"DS//:lemieszr"') {
console.log("success");
}
};
问题是$scope。User是一个资源对象,如下所示
Resource {$get: function, $save: function, $query: function, $remove: function, $delete: function}
0: """
1: "D"
2: "S"
3: ""
4: ""
5: "l"
6: "e"
7: "m"
8: "i"
9: "e"
10: "s"
11: "z"
12: "r"
13: """
__proto__: Resource
无论如何都要得到包含我的用户名的字符串。User.query()只返回一个空数组
我建议你看看Angular对Kris Kowal的Q promise库($ Q)的实现。我现在也在使用mvc 4.0,我发现它比ngResource灵活得多。
然而,具体到你的问题,你的问题是你正在向你的服务器发出异步请求,同时同步调用其响应。好吧,数据还没有到达那里(为什么您看到一个空数组[])。这个空数组基本上是服务器在说,嘿,你的http请求做得很好,我们正在获取你的数据,为了向你证明这是一个空数组,当数据到达你那里时,我们会把数据放在那里
换句话说,你的问题是你要求设置检查$scope的值。用户甚至没有一个(粗略地说)。
你有两个简单的修复选项(至少据我所知):您可以设置$scope。用户在单独的函数或其他服务中接收来自服务器的响应,然后在到达服务器后使用响应。或者(更好的"简单"修复)使用$timeout服务,它本质上告诉您的系统"冷却,直到我的异步请求完成并获得我的数据"。
User.query()
返回一个空数组,因为它需要一个json对象数组[{...},{...}]
作为后端响应。用户。get假设你的服务器返回一个对象,例如{"name":"Andi"},所以如果你的服务器响应是正确的,那么get方法就没有问题。
$scope.user = User.get();
您可以访问您的名称属性为$scope.user.name
链接