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 に答える