我在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 Controller
$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()只返回一个空数组。
发布于 2013-06-21 00:10:57
我建议研究一下Angular对Kris Kowal的Q promise库($q)的实现。我现在也在使用MVC4.0,我发现它比ngResource更灵活。
但是,对于您的问题,这里的问题是您正在向服务器发出异步请求,同时同步调用其响应。好吧,数据还没有到达那里(为什么你会看到一个空数组[])。这个空数组基本上就是服务器说:“嘿,在你的http请求上做的很好,我们正在获取你的数据,为了向你证明这一点,这里是一个空数组,当数据到达你的时候,我们将把数据放在那里。”
换句话说,你的问题是,在$scope.user的值还没有出现之前,你就要求设置检查它的值(粗略地说)。
您可以选择两种简单的修复方法(至少据我所知):您可以在一个单独的函数或其他服务中将$scope.user设置为来自服务器的响应,然后在响应到达后使用该响应。或者(更好的“简单”修复)使用$timeout服务,它本质上是告诉您的系统“冷静下来,直到我的异步请求完成,并且我有了我的数据”。
发布于 2013-06-21 00:33:46
User.query()返回一个空数组,因为它需要一个json对象数组[{...},{...}]作为来自后端的响应。例如,User.get假设你的服务器返回一个像{"name":"Andi"}这样的对象,所以如果你的服务器响应是正确的,get方法就没有问题。
$scope.user = User.get();那么您就有权以$scope.user.name身份访问您的name属性
这可能会帮助你link
https://stackoverflow.com/questions/17218238
复制相似问题