首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用字母数字表示AngularJS列表项

问用字母数字表示AngularJS列表项
EN

Stack Overflow用户
提问于 2013-08-29 16:49:47
回答 1查看 251关注 0票数 1

我一直在按字母数字对项目列表进行排序。我已经发现,在orderBy中使用ng重复序列往往会根据它正在处理的数据类型进行数字排序或按字母顺序排序。但是,它不按字母数字排序。

JavaScript代码:

代码语言:javascript
复制
    function AppCtrl($scope) {
        $scope.items = [
             {'name':'School Item 1','address':'1920'},
             {'name':'Work Item 2','address':'4192'},
             {'name':'Ad Item 5','address':'2039'},
             {'name':'Cool Item 45','address':'2090'},
             {'name':'Cool Item 50','address':'1029'},
             {'name':'Cool Item 100','address':'1829'},
             {'name':'Cool Item 400','address':'1728'}
        ];
    }

HTML代码:

代码语言:javascript
复制
    <ul ng-controller="AppCtrl">
        <li ng-repeat="item in items|orderBy:['name','address']">
             {{item.name}} {{item.address}}
        </li>
    </ul>

这是小提琴http://jsfiddle.net/roverton/PuYLS/1/

请注意,当订购时,它将显示1,然后100,45,然后400,5,然后50等。我想订购这些字母数字。我如何在AngularJS中做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-29 18:06:11

一种方法是使用一个函数来提取数字。

代码语言:javascript
复制
function nameNumberSorter(item) {
    var numberPart = item.name.replace('NamedItem', '');
    return parseInt(numberPart);
}

然后稍微修改一下过滤器:

代码语言:javascript
复制
<div ng-app>
    <ul ng-controller="AppCtrl">
        <li ng-repeat="item in items|filter:deviceBindingFilter|orderBy:nameNumberSorter">
            {{item.name}} - {{item.address}}
        </li>
    </ul>
</div>

Alternatively,,您可以在您的模型上创建一个额外的字段来进行排序。

代码语言:javascript
复制
function AppCtrl($scope) {
    $scope.items = [
         {'name':'NamedItem1','address':'1920', 'sortOrder': 1 },
         {'name':'NamedItem2','address':'4192', 'sortOrder': 2 },
         {'name':'NamedItem5','address':'2039', 'sortOrder': 5 },
         {'name':'NamedItem45','address':'2090', 'sortOrder': 45 },
         {'name':'NamedItem50','address':'1029', 'sortOrder': 50 },
         {'name':'NamedItem100','address':'1829', 'sortOrder': 100 },
         {'name':'NamedItem400','address':'1728', 'sortOrder': 400 }
    ];
}

并改变你的类型来看这个领域。

代码语言:javascript
复制
<div ng-app>
    <ul ng-controller="AppCtrl">
        <li ng-repeat="item in items|filter:deviceBindingFilter|orderBy:'sortOrder'">
            {{item.name}} - {{item.address}}
        </li>
    </ul>
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18516708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档