AngularJS非ascii属性名称支持

时间:2015-05-16 08:25:03

标签: angularjs utf-8 non-ascii-characters

我不知道如何在AngularJS中使用非ascii属性名称。我可以使用a['property_name']代替a.property_name来打印值,但我无法在'orderBy'中使用相同的方法。如果我点击“名称”,就会发生排序,但是如果我点击“가격_price”,则不会发生任何事情,并且控制台中会显示错误。我怎么能对具有非ascii名称的表进行排序?

(代码中有韩文字符,但我认为这很有意义。)

http://jsfiddle.net/k9h32mh9/

<div ng-app>
    <div ng-controller="ListCtrl">
        <table>
            <tr>
                <th><a ng-click="predicate='name'; reverse=false">name</a></th>
                <th><a ng-click="predicate='가격_price'; reverse=false">가격(price)</a></th>
            </tr>
            <tr ng-repeat="item in items | orderBy:predicate:reverse">
                <td>{{item.name}}</td>
                <td>{{item['가격_price']}}</td>
            </tr>
        </table>
    </div>
</div>
<script>
function ListCtrl($scope, $http) {
    $scope.predicate = '-name';
    $scope.items = [{name: "a", 가격_price:"1000"},
                    {name: "b", 가격_price:"2000"},
                    {name: "c", 가격_price:"1500"}];
}
</script>

1 个答案:

答案 0 :(得分:3)

虽然这是Angular的问题,但根据https://github.com/angular/angular.js/issues/2174,可以通过在作用域上指定自己的谓词函数来解决它,以便访问属性以进行排序:

$scope.predicateProperty = 'name';
$scope.predicate = function(a) {
    return a[$scope.predicateProperty];
};

HTML可以几乎相同,只需将predicateProperty设置为您要排序的属性名称(我还删除了对“反向”的引用,因为它使问题稍微复杂化)

<table>
    <tr>
        <th><a ng-click="predicateProperty='name';">name</a></th>
        <th><a ng-click="predicateProperty='가격_price';">가격(price)</a></th>
    </tr>
    <tr ng-repeat="item in items | orderBy:predicate">
        <td>{{item.name}}</td>
        <td>{{item['가격_price']}}</td>
    </tr>
</table>

您可以在http://jsfiddle.net/k9h32mh9/5/

看到这种情况