【问题标题】:Issue with $http service in Angular 1.2Angular 1.2 中的 $http 服务问题
【发布时间】:2013-11-13 06:21:53
【问题描述】:

我刚开始在我的开发应用程序中使用 Angular 1.2.0,我注意到以下功能不再起作用,看看:

var myItems = angular.model('myItems', []);

myItems.controller('itemsController', function($scope, $http) {

    // delete item from the database
    $scope.deleteItem = function(id) {
        $http.delete('/api/items/' + id)
            .success(function(data) {
                $scope.items = data;
            })
            .error(function(data) {
                // log error 
            });
    };
});

那么在我看来,这就是触发删除项目的原因:

<input type="checkbox" data-ng-click="deleteItem(item._id)"> {{ item.text }}

我对 Angular 很陌生,所以我不确定这里到底出了什么问题,查看 Angular 存储库中 1.2 版的 changelog 文件并没有得到答案。有更多 Angular 经验的人可以向我解释一下到底是什么问题吗?

编辑:这是来自 Chrome 错误控制台的日志,页面加载后即可看到。单击复选框删除项目不会执行任何操作。

Error: [$parse:isecprv] http://errors.angularjs.org/undefined/$parse/isecprv?p0=deleteItem(item._id)
at Error (<anonymous>)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js:6:453
at ha (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js:84:103)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js:87:372
at Array.forEach (native)
at q (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js:7:261)
at rc (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js:87:354)
at Jb.readIdent (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js:149:31)
at Jb.lex (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js:144:199)
at Ya.parse (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js:151:12) <input type="checkbox" data-ng-click="deleteItem(item._id)">

更新:事实证明,Angular 1.2.0-rc2(当前最新的稳定版本)中的一项重大变化是在作用域上引入了私有属性链。这可能会破坏许多将数据存储在面向文档的数据库中的应用程序,例如在我的情况下为MongoDB。如果您遇到同样的问题,您可以暂时返回到版本 1.2.0-rc3 (Google CDN here) 或按照建议将敏感 API 包装在闭包/控制器中在更新日志中。

【问题讨论】:

  • 你在 chrome 的网络标签中看到了什么
  • 在点符号中使用delete 会导致IE8 出现问题。考虑使用$http['delete'](...)
  • @Ajaybeniwal 刚刚用日志更新了 OP。

标签: javascript angularjs


【解决方案1】:

在错误控制台中,第一个链接指向页面

http://docs.angularjs.org/error/$parse:isecprv?p0=deleteItem(item._id)

此页面说明错误是您在表达式中使用了私有属性。

表达式是deleteItem(item._id)

_id - 是项目的私有属性。

【讨论】:

    【解决方案2】:

    尝试更改字段名称 (_id)。从错误控制台可以清楚地看到这个错误。

    从 Angular 版本 1.2

    不允许在 Angular 表达式中引用私有字段! 表达式:deleteItem(item._id)

    名称以下划线开头或结尾的字段被视为私有字段。 Angular 表达式不允许引用作用域链上的此类字段。

    更多info

    【讨论】:

    • 谢谢。我在 OP 中添加了一段可能会帮助其他面临同样问题的人。
    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多