AngularJS如何在工厂模块中使用RESTful

时间:2014-07-21 21:07:38

标签: javascript angularjs factory angular-resource

我在2小时内制作RESTful代码时遇到错误。

我有一个文件在这里有一个控制器

angular.module('orderToBeShippedApp',['ng','projectService'])

    .controller('orderCtrl',function($scope, Project){

        Project.query(function(data){
            alert(data);
            $scope.projects = data;
        });

    });

这是我的死亡,被称为' project'。

angular.module('projectService',['ng','ngResource'])
   .factory('Project',function($resource){

      return $resource('api/url/:projectId.json',{},{
        query:{
          method:'get',
          params: {projectId:"test"},
          isArray: false
        }
      });

   });

我的HTML:

<div ng-controller = "orderCtrl" class ="col-sm-8 col-md-9">
    <!--Body content -->
    <div  ng-repeat = "project in projects">
        <h2>{{project.name}}</h2>
    </div>
</div>

我的json就像

[
    {
    "age": 0, 
    "id": "a", 
    "imageUrl": "a0.jpg", 
    "name": "b", 
    "snippet": "Tbaa."
   }, 
 {
    "age": 1, 
    "id": "mo", 
    "imageUrl": "assets/images/phones/mo.0.jpg", 
    "name": "M\u2122", 
    "snippet": "The Ned by Android 3.0 (Honeycomb)."
  }

]

它没有在浏览器上给我任何错误消息。它似乎在工厂功能上有问题。

有人可以帮我解决吗?

2 个答案:

答案 0 :(得分:0)

您应该根据模型定义将绑定更改为name,而不是ProjectName

<div ng-controller = "orderCtrl" class ="col-sm-8 col-md-9">
<!--Body content -->
<div  ng-repeat = "project in projects">
    <h2>{{project.name}}</h2>
</div>

另外,要使用ngResource,您需要记住将脚本引用添加到:angular-resource

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular-resource.min.js"></script>

更新:

  1. 删除'ng'依赖
  2. 将资源作为依赖项传递给控制器​​。

    // resource
    angular.module('projectService',['ngResource'])
    .factory('Project',function($resource){
        return $resource('api/url/:projectId.json',{},{
            query:{
              method:'get',
              params: {projectId:"test"},
              isArray: false
            }
        });
    });
    // controller
    angular.module('orderToBeShippedApp',['projectService'])
    .controller('orderCtrl',['$scope','Project', function($scope, Project){
        Project.query(function(data){
            alert(data);
            $scope.projects = data;
        });
    }]);
    

答案 1 :(得分:0)

您的工厂可能没有出现控制台错误,但可能无法恢复数据。你的工厂应该是这样的:

angular.module('projectService',['ng','ngResource'])
  .factory('Project',function($resource){

  return {
    projects: $resource('api/url/:projectId.json', {projectId: '@test'})
    }
  });
}]);

在你的控制器中它应该调用这样的方法:

angular.module('orderToBeShippedApp',['ng','projectService'])

.controller('orderCtrl',['$scope','Project',function($scope, Project){

     $scope.projects = Project.projects.get({id: 'test'});

}]);

更新:

为了放松chrome xmlHttpRequest错误,您需要从计算机的chrome.exe文件夹运行此命令:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security