javascript - Angular $resource 没有按预期工作

标签 javascript angularjs

我在 AngularJS 中有一个非常简单的地址应用程序。它使用 $resource 连接到 API。

我使用的 ID 是此人的手机号码(我知道这不是最好的方法,但它只是一个显示 3 层应用程序设置的示例应用程序)所以我有 2 个页面相同形式:

insert and edit form

我面临的问题是它使用相同的 $resource 来保存新地址和保存已编辑的地址。当我保存一个新地址时,它必须使用没有附加 ID 的 url http://127.0.0.1:5000/api/contacts/(新 ID 将在 api/数据库端就是填写的手机号) 当我编辑现有地址并单击保存按钮时,它必须使用另一个 url; http://127.0.0.1:5000/api/contacts/@mobilePhone

所以我阅读了有关 https://docs.angularjs.org/api/ngResource/service/ 的 Angular 文档$resource 声明您可以在您的操作中覆盖您的 paramDefaults。这就是我尝试使用此代码执行的操作:

$resource('http://127.0.0.1:5000/api/contacts/:id',{id:'@mobilePhone'},{
        get: {
            method: 'GET'
        }, update: {
            method: 'PUT'
        }, save: {
            method: 'POST',
            id:''
        }
    },{});

根据信息,这似乎是正确的。它分别在每个 GET 和每个 PUT get 和 update 方法上附加手机号码。当它调用保存方法时,它应该用一个空字符串覆盖 :id,但它并没有这样做。 显然我做错了什么。

如果您需要更多代码片段,请告诉我,我尽量保持代码片段的整洁。

更新:

这是我调用保存方法的方式:

.... 
.controller('MovieCreateController',function($scope,$state,$stateParams,Movie){

    $scope.movie=new Movie();

    $scope.addMovie=function(){

        $scope.movie.$save(function(){
            $state.go('movies');
        });
    }

}

这是编辑方法:

....
 .controller('MovieEditController',function($scope,$state,$stateParams,Movie){

    $scope.updateMovie=function(){
        $scope.movie.$update(function(){
            $state.go('movies');
        });
    };

    $scope.loadMovie=function(){
        $scope.movie=Movie.get({id:$stateParams.id});
    };

    $scope.loadMovie();
});

最佳答案

您的问题中没有太多代码,所以我将尝试解释您应该如何使用 $resource。

看看下面的代码:

// The $resource service is a helper to create a 'constructor' function 
// Contact below is a function 
var Contact = $resource('http://127.0.0.1:5000/api/contact/:id',{id:'@mobilePhone'}, {
get: {
    method: 'GET' // You don't need to override the GET
}, update: {
    method: 'PUT'
}, save: {
    method: 'POST'
}});

// Be sure to create an 'entity' from the Contact $resource
// The 'new' will create a $resource instance with $update, $save methods overridden methods
var contact = new Contact({name: 'foobar'});
contact.$save(); // Will send a POST request

contact.mobilePhone = 2; // This is your id !
contact.$update();  // Will send a PUT request

如果您的资源始终具有 RESTful 表示,我建议您按照 angular discussion on issue#9807 中的建议使用:

resource.prototype.$save = function() {
    if (this.id) {
        return this.$update();
    } else {
        return this.$create();
    }
};

..而是总是覆盖你的 $resource 方法。

关于javascript - Angular $resource 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162592/

相关文章:

javascript - 在 JavaScript 中插入 MySQLi

javascript - DOMSubtreeModified 的 Jquery 替代品

javascript - angularjs 一个元素上的两个指令

javascript - 修补 Element.prototype.addEventListener 会破坏任何 Angular 2 应用程序

angularjs - 2 个 ng-grids(主/细节)的漂亮自动布局,其宽度根据内容(运行时的 CSS)而变化

javascript - 使用 Angular JS 指令时出错

javascript - Nodejs模块导出使用

javascript - 细化 MarkLogic 查询

javascript - 如何使用 Jest 模拟实例化对象

javascript - 如何使用 angularjs 从表中删除特定行?