javascript - Restangular 不 PUT 完整对象

标签 javascript angularjs node.js express restangular

我对这一切都很陌生,所以如果我犯了一些重大疏忽,请不要大声喊叫。

我正在尝试使用 reangular 更新表行。然而,似乎并不是所有的对象数据都被设置到restapi。我已经使用 POSTMAN 测试了restapi,所以我知道它可以工作,并且我还创建了新对象。

使用谷歌开发工具,PUT 完成 200 OK,但请求的有效负载只有行的 ID。实际上,如果我在包含数据的现有行上尝试执行此操作,它会清除除 ID 之外的所有数据!

这就是我所拥有的:

HTML:

<div ng-controller="networksController">
<h1>{{title}}</h1>

<input type="text" ng-model="search" class="search-query" placeholder="Search">

<table class="table table-striped">
    <thead>
        <th>ID</th>
        <th>Title</th>
        <th>Reason</th>
        <th>Actions</th>
        <th>Requester</th>
        <th>Verified</th>
        <th></th>
    </thead>
    <tbody>
        <tr ng-repeat="change in changes | filter:search">
            <td>{{ change._id }}</td>
            <td>
                <div class="animate-show" ng-hide="editorEnabled">{{ change.title }}</div>
                <div class="animate-show" ng-show="editorEnabled">
                    <input class="animate-input" type="text" ng-model="change.title" />
                </div>
            </td>
            <td>
                <div class="animate-show" ng-hide="editorEnabled">{{ change.reason }}</div>
                <div class="animate-show" ng-show="editorEnabled">
                    <input class="animate-input" type="text" ng-model="change.reason" />
                </div>
            </td>
            <td>
                <div class="animate-show" ng-hide="editorEnabled">{{ change.actions }}</div>
                <div class="animate-show" ng-show="editorEnabled">
                    <input class="animate-input " type="text" ng-model="change.actions" />
                </div>
            </td>
            <td>
                <div class="animate-show" ng-hide="editorEnabled">{{ change.requester }}</div>
                <div class="animate-show" ng-show="editorEnabled">
                    <input class="animate-input" type="text" ng-model="change.requester" />
                </div>
            </td>
            <td>
                <div class="animate-show" ng-hide="editorEnabled">{{ change.verified }}</div>
                <div class="animate-show" ng-show="editorEnabled">
                    <input class="animate-input" type="text" ng-model="change.verified" />
                </div>
            </td>
            <td>
                <input type="button" value="Edit" ng-hide="editorEnabled" ng-click="editorEnabled=!editorEnabled" />
                <input type="button" value="Save" ng-show="editorEnabled" ng-click="editorEnabled=!editorEnabled; save(change)" />
                <button ng-click="destroy(change)">Delete</button>
            </td>
        </tr>
    </tbody>
</table>

主 Controller :

var app = angular.module('richApp', ['ngResource', 'ngAnimate', 'restangular', 'xeditable'])
.config(function(RestangularProvider) {
            RestangularProvider.setBaseUrl('api/');
        });

页面 Controller :

app.controller('networksController', ['$scope', '$resource', 'Restangular', function($scope, $resource, Restangular) {

    $scope.title = 'Network Control APP';

    var baseChanges = Restangular.all('changes');

    baseChanges.getList().then(function(changes) {
        $scope.allChanges = changes;
    });

    $scope.changes = Restangular.all('changes').getList().$object;

    $scope.destroy = function(change) {
        Restangular.one("changes", change._id).remove();
    };

    $scope.save = function(change) {
        Restangular.one("changes", change._id).put();
    };

}]);

最佳答案

好吧,经过三天的高低搜索,我终于找到了答案。 Mongo 和 restangular 使用不同的 ID Key。 mongo 使用 _id,而 Restangle 使用 id。

为了纠正这个问题,我需要添加以下内容

var app = angular.module('richApp', ['ngResource', 'ngAnimate', 'restangular', 'xeditable'])

.config(function(RestangularProvider) {
    RestangularProvider.setBaseUrl('api/');
    RestangularProvider.setRestangularFields({ //Added this
      id: "_id"                                //Added this
    });                                        //Added this
});

可以公平地说,我还修改了以下内容:

$scope.save = function(change) {
         Restangular.one("changes", change._id).get().then(function(data) {
            $scope.data = data;

        });

        var original = change;
        $scope.data = Restangular.copy(original);
        $scope.data.save();
    };

关于javascript - Restangular 不 PUT 完整对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29113939/

相关文章:

javascript - 递增整数序列

node.js - nodejs stdin 可读事件未触发

javascript - 将数据添加到现有的 json 对象

javascript - 如何访问js函数外部的变量

javascript - 检查长度为 5 的子字符串是否在另一个字符串中(重构)

javascript - ES6 属性值简写 undefined

Node.js 服务器因用户错误而重置

angularjs - 为什么我的 ionic www 文件夹没有被 Git 跟踪?

javascript - AngularJS 数据表

javascript - 这个新的重复拖放指令有什么问题?