Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用拆分字符串函数的结果使用Angular.js创建orderBy?_Javascript_Angularjs_Angularjs Ng Repeat_Ng Repeat_Angularjs Orderby - Fatal编程技术网

Javascript 如何使用拆分字符串函数的结果使用Angular.js创建orderBy?

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

我正在显示一个示例员工数据表,需要按姓氏排序。数据通过.JSON文件提供,名称为单个字符串:

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": "58604­1099",
    "geo": {
      "lat": "27.8718",
      "lng": "21.8984"
    }
  },
  "phone": "210.067.6132",
  "website": "elvis.io",
  "company": {
    "name": "Johns Group",
    "catchPhrase": "Configurable multimedia task­force",
    "bs": "generate enterprise e­tailers"
  }
}
到目前为止,我已经能够将字符串分为两部分:

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];
}