Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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 角度$resource未按预期工作_Javascript_Angularjs - Fatal编程技术网

Javascript 角度$resource未按预期工作

Javascript 角度$resource未按预期工作,javascript,angularjs,Javascript,Angularjs,我在AngularJS中有一个非常简单的地址应用程序。它使用$resource连接到API 我使用的ID是该人的手机号码(我知道这不是最好的方法,但它只是一个示例应用程序,用于显示三层应用程序设置),因此我有两个相同表单的页面: 我面临的问题是,它使用相同的$resource来保存新地址和编辑后的地址。当我ḿ 保存新地址时必须使用urlhttp://127.0.0.1:5000/api/contacts/没有附加id(它将在api/数据库端获得的新id是填写的移动电话号码) 当我编辑一个现有地

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

我使用的ID是该人的手机号码(我知道这不是最好的方法,但它只是一个示例应用程序,用于显示三层应用程序设置),因此我有两个相同表单的页面:

我面临的问题是,它使用相同的$resource来保存新地址和编辑后的地址。当我ḿ 保存新地址时必须使用url
http://127.0.0.1:5000/api/contacts/
没有附加id(它将在api/数据库端获得的新id是填写的移动电话号码) 当我编辑一个现有地址并单击保存按钮时,它必须使用另一个url<代码>http://127.0.0.1:5000/api/contacts/@手机

因此,我已经阅读了$resource上的angular文档,其中声明您可以在操作中覆盖您的默认参数。因此,这就是我尝试使用以下代码所做的:

$resource('http://127.0.0.1:5000/api/contacts/:id',{id:'@mobilePhone'},{
        get: {
            method: 'GET'
        }, update: {
            method: 'PUT'
        }, save: {
            method: 'POST',
            id:''
        }
    },{});
考虑到这些信息,这似乎是正确的。它分别在GET和update方法的每个GET和每个PUT上附加mobilePhone号码。当调用save方法时,它应该用空字符串覆盖
:id
,但它不会这样做。 很明显我做错了什么

如果你需要更多的代码,请告诉我,我会尽量保持它的干净

更新: 下面是我如何调用save方法的:

.... 
.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表示,我建议您使用,如建议的:


…而不是总是覆盖$resource方法。

这就是您需要调用save方法的方式 $scope.movie=新电影()


这就是您需要调用编辑方法的方式

 $scope.movie=new Movie();
$scope.updateMovie=function(){
    $scope.movie.$update({ "mobilePhone": $stateParams.id},function(){
        $state.go('movies');
    });
};
为此,您需要为$resource.com创建一个工厂,这总是值得推荐的

试试这个

.factory('movie', ['$resource', function ($resource) {
    return $resource('http://127.0.0.1:5000/api/contacts/:id',{id:'@mobilePhone'},{}, {
        update: { method: 'PUT' },
        query: {
            method: 'GET',
            isArray: false
        }
    })
}])
将工厂注入控制器

.controller('MovieCreateController',['$scope','$state','$stateParams','movie',function($scope,$state,$stateParams,Movie){
}]);

您好,请参考是的,我确实是在这个基础上建立的(巧合),但我无法用那里提供的信息来理解。请您添加您的帖子,并将您如何称呼他们的请求放入其中?@Parshuram,我已经更新了问题。这并没有为我解决问题。除非我删除
$scope.movie=new movie(),否则它甚至无法工作”。然后,它的工作原理与以前一样。不,您需要实例化资源,而不是另一个对象,请参阅@FrancoisMurel answer/
.factory('movie', ['$resource', function ($resource) {
    return $resource('http://127.0.0.1:5000/api/contacts/:id',{id:'@mobilePhone'},{}, {
        update: { method: 'PUT' },
        query: {
            method: 'GET',
            isArray: false
        }
    })
}])
.controller('MovieCreateController',['$scope','$state','$stateParams','movie',function($scope,$state,$stateParams,Movie){
}]);