6

AngularJS 新手,试图掌握框架,并尝试构建一个基本的 CRUD 应用程序。我似乎无法弄清楚更新现有记录需要什么。这是我的服务:

 angular.module('appServices', ['ngResource']).
factory('App', function ($resource) {
    var Item = $resource('App/:AppId', {
        //Default parameters
        AppId: '@id'
    }, {
        //Actions
        query: {
            method: 'GET',
            isArray: true
        },
        getById: {
            method: 'PUT'
        },
        update: {
            method: 'POST'
        }
    });
    return Item;
});

我可以运行基本的 Get all 查询和 getById 来填充编辑表单,但这就是我遇到的问题。这是 getById 的示例代码

 $scope.apps = App.query();

$scope.getEdit = function(AppId) {
    App.getById({id:AppId}, function(app) {
        $scope.original = app;
        $scope.app = new App(app);
    });
};

$scope.save = function() {
    //What type of information should go here?
    //Do I need to make changes to the appServices?
};

我想,我只是不确定下一步更新现有信息是什么,或者“app”对象如何传递给 API,谁能指出我正确的方向,或者告诉我一个快速更新方法?

4

2 回答 2

7

这是处理角度保存操作的一种非常混乱的方式。一方面 - 您不应该将 PUT 操作用于检索请求,其次 - 所有这些都已内置于 angular。见下文。

var Item = $resource( 'App/Details/:AppId', { AppId: '@id' } );

var item = Item.get({ id: 1 }, function( data ) {
    data.setAnothervalue = 'fake value';
    data.$save();
);

我在这里做的是检索一个“项目”,然后在它返回后立即用新数据保存它。

Angular JS 已经提供了一组默认值,包括查询、保存、删除/删除、get.etc。对于大多数 RESTful API,你真的不需要添加太多,如果有的话。有关更多信息,请参阅资源文档,特别是有关默认值的信息:http: //docs.angularjs.org/api/ngResource .$resource

此外,一旦您掌握了这一点 - 您可能希望将 $save 用于创建/更新操作,但使用 POST/PUT(RESTful 约定)。如果你这样做,请参阅我不久前写的文章:http: //kirkbushell.me/angular-js-using-ng-resource-in-a-more-restful-manner/

于 2013-06-28T00:34:53.193 回答
4

在进行了更多研究并查看了 Daniel 的链接(谢谢)之后。我让它工作了。

控制器方法:

 $scope.save = function() {
    $scope.app.update();
};

服务工厂:

 var Item = $resource('App/Details/:AppId', {
        //Default parameters
        AppId: '@id'
    }, {
        //Actions
        query: {
            method: 'GET',
            isArray: true
        },
        getById: {
            method: 'PUT'
        },
        update: {
            method: 'POST'
        }
    });

    Item.prototype.update = function (cb) {
        console.log(this.AppId);
        return Item.update({ AppId: this.AppId },
        angular.extend({}, this, { AppId: undefined }), cb);
    };

    return Item;
于 2012-08-21T12:42:17.857 回答