1

我有一个对表格中的列进行排序的角度指令。在 1.20 版本之前,这可以工作,但在升级到 1.20 之后,我收到以下错误。有谁知道出了什么问题?

错误:[$parse:isecprv] http://errors.angularjs.org/undefined/ $parse/isecprv?p0=_sort()

app.directive('sorted', function () {
    return {
        scope: true,
        transclude: true,
        template: '<a href="#/" ng-click="_sort()" ng-transclude=""></a>' +
            '<span class="sortArrow" ng-show="show_sort_icon(true)">&#x25BC;</span>' +
            '<span class="sortArrow" ng-show="show_sort_icon(false)">&#x25B2;</span>',
        controller: function ($scope, $element, $attrs) {

            $scope._sort = function () {
                $scope.model.sort($attrs.sorted);
            };

            $scope.show_sort_icon = function (is_desc) {
                return ($scope.model.sidx == $attrs.sorted) && ($scope.model.is_desc == is_desc);
            };
        }
    };
});

用法:

<table>
    <thead>
        <tr>
            <th sorted="something">Something</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="item in model.items">
            <td>{{item.something}}</td>
        </tr>
    </tbody>
</table>

在此处输入图像描述

4

1 回答 1

0

@Heikki 找到的答案

名称以下划线开头或结尾的字段被视为私有字段。Angular 表达式不允许引用作用域链上的此类字段。这仅适用于 Angular 表达式(例如插值和使用字符串表达式参数调用 $parse)——Javascript 本身没有这样的概念。

要解决此错误,请使用备用的非私有字段(如果可用)或公开该字段(通过从其名称中删除任何前导和尾随下划线字符。)

将导致此错误的示例表达式:

<div>{{user._private_field}}</div>
于 2014-01-15T04:40:37.047 回答