【问题标题】:$save gives me TypeError: undefined is not a function when saving model that is a list in angular$save 给了我 TypeError: undefined is not a function when save model that is a list in angular
【发布时间】:2014-11-21 21:29:18
【问题描述】:

我正在使用当前版本的 asp.net、mvc、rest api 和 angular.js。我用一个列表填充我的页面然后在 $save 它给我错误 TypeError: undefined is not a function

    $scope.scacTaskPLDetails = {};

    $scope.onGetTaskList = function () {
    var scacTaskRes = $resource("api/ScacTaskPLDetails");
    scacTaskRes.query({ taskID: scacTaskID }, function (scacTaskPL) {
        $scope.scacTaskPLDetails = scacTaskPL;
    });
}
 /************************ Save Task **************************/
$scope.onSaveScacTask = function () {
    if (!$scope.isEditing) {
        $scope.$broadcast('show-errors-event');
        if ($scope.TaskForm.$invalid) { return; }
        $scope.$broadcast('show-errors-event');
        if ($scope.TaskForm.$invalid) { return; }
    }

    $scope.scacTaskPLDetails.$save(function (results) {
        if (results.successful) {
            Notifications.success(results.serverMessage);
            $scope.onReloadPage();
        }
        else {
            Notifications.error(results.serverMessage);
        }
    });
}

我希望这是足够的信息。到目前为止,我没有遇到任何问题,唯一不同的是我保存的是一个列表而不是单个对象。在调试中,我可以看到填充视图模型 scacTaskPLDetails 的对象列表。

【问题讨论】:

  • $scope.scacTaskPLDetails 是一个项目数组。如果您在开发工具中检查它们,您会发现它是资源实例的集合,每个实例都有 $save 方法
  • 谢谢,我可以在逐步执行 save 方法时查看实例,它包含我的实例。这就是为什么当我收到错误 Undefined: is not a function 时我感到困惑的原因。

标签: javascript arrays angularjs


【解决方案1】:

您应该使用您的资源向您的 endopint 发送操作,而不是您从资源中获得的响应

试试类似的东西

var scacTaskRes = $resource("api/ScacTaskPLDetails");

  $scope.scacTaskRes.$save(function (results) {
        if (results.successful) {
            Notifications.success(results.serverMessage);
            $scope.onReloadPage();
        }
        else {
            Notifications.error(results.serverMessage);
        }
    });

【讨论】:

  • 我会在星期一试试这个,不能在家工作。使用资源 $save 的原因是因为我有收藏吗?我问的原因是因为我使用的模式在这个项目中一直有效,但我一直只保存单个视图模型对象而不是集合。
  • 很有趣,我从未见过这种方法,尝试用资源来做,让我知道,祝你好运
  • 尝试了几种方法,仍然 TypeError: undefined is not a function。我们一直在使用资源来配置对 api 的调用,然后将结果推送到我们的本地视图模型中。使用单个实例它可以正常工作,但使用集合......好吧没有骰子。
【解决方案2】:

感谢您的提示。我终于用 isArray: true 来保存我的收藏了

app.factory("SaveArrayOfTaskPLObjects", ['$resource', function ($resource) {
return $resource(
    "api/ScacTaskPLDetails",
    {},
    {
        save: {
            method: 'POST',
            isArray: true
        }
    }
);

}]);

【讨论】:

  • 是的,这就是我向您发送有关该主题的链接的原因,我很高兴它成功了,干杯!
猜你喜欢
  • 2014-06-29
  • 2014-06-28
  • 2021-11-12
  • 2015-09-18
  • 2013-12-22
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多