Javascript 如何使用拆分字符串函数的结果使用Angular.js创建orderBy?
我正在显示一个示例员工数据表,需要按姓氏排序。数据通过.JSON文件提供,名称为单个字符串:Javascript 如何使用拆分字符串函数的结果使用Angular.js创建orderBy?,javascript,angularjs,angularjs-ng-repeat,ng-repeat,angularjs-orderby,Javascript,Angularjs,Angularjs Ng Repeat,Ng Repeat,Angularjs Orderby,我正在显示一个示例员工数据表,需要按姓氏排序。数据通过.JSON文件提供,名称为单个字符串: users.json { "id": 5, "name": "Bob Smith", "username": "Eloyn.Skilles", "email": "smith.bob@bolly.biz", "address": { "street": "Rox Trial", "suite": "Suite 2890", "city": "Smashmou
users.json
{
"id": 5,
"name": "Bob Smith",
"username": "Eloyn.Skilles",
"email": "smith.bob@bolly.biz",
"address": {
"street": "Rox Trial",
"suite": "Suite 2890",
"city": "Smashmouth",
"zipcode": "586041099",
"geo": {
"lat": "27.8718",
"lng": "21.8984"
}
},
"phone": "210.067.6132",
"website": "elvis.io",
"company": {
"name": "Johns Group",
"catchPhrase": "Configurable multimedia taskforce",
"bs": "generate enterprise etailers"
}
}
到目前为止,我已经能够将字符串分为两部分:
MainController.js
/* Function to split strings where there is a space present */
$scope.nameSplitter = function(string, index) {
$scope.array = string.split(' ');
return $scope.result = $scope.array[index];
}
以下是HTML:
<table class="table table-striped table-bordered table-condensed table-hover">
<th>Name</th>
<th>Email</th>
<th>Phone</th>
<!-- Would like to ideally orderBy last name -->
<tr ng-repeat="user in userData | orderBy:'name'">
<td>{{ nameSplitter(user.name,1) }}, {{ nameSplitter(user.name,0) }}</td> <!--0 returns first name, 1 returns last name-->
<td><a ng-href="mailto:{{user.email}}" target="_blank">{{user.email}}</a></td>
<td><a ng-if="user.phone !== ''" href="tel:{{nameSplitter(user.phone, 0)}}" data-toggle="tooltip" title="{{nameSplitter(user.phone, 0)}}">
<span class="glyphicon glyphicon-earphone"></span></a></td>
</table>
名称
电子邮件
电话
{{nameSplitter(user.name,1)},{{nameSplitter(user.name,0)}
我用各种括号组合尝试了这个
orderBy:'nameSplitter(user.name,1)
,但没有成功。您可以在orderBy
中使用数组
、函数
或属性名
所以在html中
<tr ng-repeat="user in userData | orderBy:myCustomOrderBy">
作用域中的当前用户作为参数传递,orderBy带有一个字符串作为表达式,因此您可以包含函数,也可以将自定义函数作为参数而不是字符串提供
<tr ng-repeat="user in userData | orderBy:'name.split(\' \')[1]'">
orderBy也接受函数
ng-repeat="user in userData | orderBy:getlastname"
$scope.getlastname = function(user) {
var name = user.name.split(' ');
return name[1];
}
您计划如何处理“边缘案例”,例如,单一姓名(贝利)、头衔加单一姓名(教皇弗朗西斯)、一个姓氏的多个部分(路德维希·范·贝多芬)、多个姓氏(恩里克·佩尼亚·涅托)、多个姓氏(莎拉·杰西卡·帕克)等。?如果可以,你应该考虑重新调整你的表,包括首选的姓氏,首选的名字,首选的地址形式…这取决于你计划如何使用数据。这是一个很好的观点。谢谢你提醒我这件事。我正在处理的这个项目中的数据很简单,幸运的是,它没有(也不会)包含边缘案例。你必须避开那些对我有用的引用!问题是我不知道如何让orderBy接受函数。谢谢
ng-repeat="user in userData | orderBy:getlastname"
$scope.getlastname = function(user) {
var name = user.name.split(' ');
return name[1];
}