javascript - AngularJS - 使用 $resource 并与 RESTful 数据源交互

标签 javascript html angularjs visual-studio-2013

我的 previous topic 遇到了问题,我无法使用我的服务。

经过一些研究,我终于找到了一种使用我的服务的方法。我仍然想知道为什么我使用 javascript 对象作为方法容器的其他方法没有成功。我有一些猜测,但找不到合适的解决方案。

希望你们能带领我走上正确的道路。

controller.js(工作解决方案)

angular.module('TodoApp.controllers', []).
controller('listCtrl', function ($scope, $location, todoApiService) {
    $scope.todos = todoApiService.query();
});

services.js(工作解决方案)

angular.module('TodoApp.services', []).
    factory('todoApiService', function ($resource) {
            return $resource('/api/todo/:id', { id: '@id' }, { update: { method: 'PUT' } });
    });

controllers.js(无效解决方案)

angular.module('TodoApp.controllers', []).
    controller('listCtrl', function ($scope, $location, todoApiService) {
        $scope.todos = todoApiService.getMyTodos.query();
    });  

services.js(无效解决方案)

angular.module('TodoApp.services', []).
    factory('todoApiService', function () {
        var todoApi = {};

        todoApi.getMyTodos = function ($resource) {
            return $resource('/api/todo/:id', { id: '@id' }, { update: { method: 'PUT' } });
        };

    return todoApi;
});

最佳答案

您应该:
$resource 注入(inject)您的工厂函数,就像您在工作版本中所做的那样。然后您可以删除 $resource 作为 getMyTodos 的参数。

angular.module('TodoApp.services', []).
    factory('todoApiService', function ($resource) {
        var todoApi = {};

        todoApi.getMyTodos = function () {
            return $resource('/api/todo/:id', { id: '@id' }, { update: { method: 'PUT' } });
        };

    return todoApi;
});

然后从 Controller :

angular.module('TodoApp.controllers', []).
    controller('listCtrl', function ($scope, $location, todoApiService) {
        $scope.todos = todoApiService.getMyTodos().query();
    });

或者,您可以将 $resource 从 Controller 传递到 getMyTodos (将其注入(inject) Controller 之后) - 这样您的 Controller 就会看起来像:

angular.module('TodoApp.controllers', []).
    controller('listCtrl', function ($scope, $location, todoApiService, $resource) {
        $scope.todos = todoApiService.getMyTodos($resource).query();
    });

我没有检查这是否有效,但它应该:)

关于javascript - AngularJS - 使用 $resource 并与 RESTful 数据源交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24162231/

相关文章:

javascript - 拖放和 Bootstrap UI Accordion

javascript - $onChanges 不会更新组件初始化时的值

javascript - 具有重名的 JS 关联对象

javascript - 使用ZeroClipboard复制到剪贴板时如何修改文本?

javascript - 如何使用 Angular 2+ 绘制矩形以选择多个元素?

jquery - "parent"元素的 .prepend 和 .append "child"元素的悬停颜色

javascript - 定义匹配除特定字符串以外的任何内容的 JavaScript 正则表达式

javascript - 检索表格中元素的背景颜色

javascript - 浏览器问题 :Branching Select Drop Down Not Supporting in IE 7 or 8

javascript - UI Router - 状态转换延迟(非常慢)