使用angular的ngResource get方法



我有一个用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

链接

最新更新