Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Web Api 2的角度资源设置_Javascript_Asp.net_Angularjs_Asp.net Web Api - Fatal编程技术网

Javascript Web Api 2的角度资源设置

Javascript Web Api 2的角度资源设置,javascript,asp.net,angularjs,asp.net-web-api,Javascript,Asp.net,Angularjs,Asp.net Web Api,所以我有我的api控制器: public BlogController { public Blog[] Get() { return context.Blogs.ToArray(); } public Blog Get(Guid id) { return context.Blogs.FirstOrDefault(b => b.Id.Equals(id)); } } 如何设置角度资源以模拟此情况 我从这个开始

所以我有我的api控制器:

public BlogController
{
    public Blog[] Get()
    {
        return context.Blogs.ToArray();
    }

    public Blog Get(Guid id)
    {
        return context.Blogs.FirstOrDefault(b => b.Id.Equals(id));
    }
}
如何设置角度资源以模拟此情况

我从这个开始:

angular.module('spaTestApp.home.services', [])
    .factory('blogRepository', ['$resource', function($resource) {
            return {
                get: function() {
                    return $resource('/api/Blogs').query();
                }
            }
        }
    ]);
然后我想我可能需要这样做:

angular.module('spaTestApp.home.services', [])
        .factory('blogRepository', ['$resource', function($resource) {
            return $resource('/api/Blogs/:id', {}, {
                query: {method:'GET', params:{id:'WHAT_GOES_HERE'}, isArray:true}
            });
        }]);
我不完全确定在
这里是什么,以及如何调用get,我假设它是:

blogRepository.query($selectedId);

您不需要在资源定义时提供所选值,因此可以将其从
$resource
配置对象中删除

相反,当你调用你所做的方法时


blogRepository.query({id:$selectedId})

如果您查看angular文档,它会解释您将在何处执行此操作。

有一节讨论用户资源,如下所示:

var User = $resource('/user/:userId', {userId:'@id'});
  var user = User.get({id:123}, function() {
    user.abc = true;
    user.$save();
  });
使用工厂时,您可以按照以下路线操作

 app.factory('Blog', ['$resource', function($resource) {
        return $resource('/api/v1/blogs/:id', {id: '@id'});
    }
 ]);
或者如果要添加更新和查询部分

app.factory('Blog', ['$resource', function($resource) {
   return $resource('/api/v1/blogs/:id', {id: '@id'},
       {
           'update': { method:'PUT' }
           'query':  { method:'GET', isArray:true},
       });
   }
]);
然后当打电话给一个get

Blog.get({id: $scope.selectedId});
或者使用收款电话

Blog.query();
这也可以像承诺一样处理

Blog.get({id: $scope.selectedId})
   .$promise.then(function(response){
     //do something with response
   });
如果您想获取一组资源

$scope.blogs; //If this is your blogs collection

Blog.get()
   .$promise.then(function(response){
       $scope.blogs = response;
   });

请记住,console.log(response)将返回一个包含两个额外组件的数组,即promise已解析和$promise。将其设置为scope变量后,它将只是一个资源数组。

在定义路由时已配置路由。它将只使用具有相同名称属性的对象的值替换模板id。试试看。我的资源看起来是这样的:
$resource('/api/Blogs/:id')