javascript - 使用 ng-repeat 从对象数组中使用另一个对象的 id 属性通过 id 查找对象

标签 javascript angularjs html angularjs-scope

我的范围内有以下数据模型。

        $scope.staff = [
        {"id": "1","name": "Alex"},
        {"id": "2","name": "Brad"},
        {"id": "3","name": "Cam"}
    ];
        $scope.closedShop =[
            {"day": "monday","staffID": "1"},
            {"day": "wednesday","staffID": "2"},
            {"day": "thursday","staffID": "3"},
            {"day": "friday","staffID": "1"}
        ];

我想要做的是输出每天哪个工作人员关闭商店,所以根据上述我的理想输出是。

亚历克斯周一关门了

布拉德周三关门了

卡姆周四关门了

亚历克斯周五关门了

我遇到的问题是关闭的商店数据仅包含staffID,我如何根据staff.id数据查找该数据以获取人员姓名?

我在下面有一个工作示例,但是,对于少数员工来说,这不是一个可扩展的解决方案?

  'use strict';
    var app = angular.module('app', []);
        app.controller('MainCtrl', ['$scope', function ($scope) {
            $scope.staff = [
            {"id": "1","name": "Alex"},
            {"id": "2","name": "Brad"},
            {"id": "3","name": "Cam"}
        ];
            $scope.closedShop =[
                {"day": "monday","staffID": "1"},
                {"day": "wednesday","staffID": "2"},
                {"day": "thursday","staffID": "3"},
                {"day": "friday","staffID": "1"}
            ];
        }]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <div ng-controller="MainCtrl">
        <div ng-repeat="closed in closedShop">
            <span ng-if="staff[0].id==closed.staffID">{{staff[0].name}}</span> 
            <span ng-if="staff[1].id==closed.staffID">{{staff[1].name}}</span> 
            <span ng-if="staff[2].id==closed.staffID">{{staff[2].name}}</span> 
            closed the shop on {{closed.day}}
            </div>
    </div>
</div>

实现此功能的最佳方法是什么?

最佳答案

这部分是钱:

<span ng-init="person = (staff | filter:{id:closed.staffID}:true)[0]">{{person.name}}</span>

这可能是不言自明的,但我会详细说明以防有帮助。

  • 您想要显示单个员工的属性,因此我将从 {{person.name}} 开始。
  • 然后,我们需要获取一个变量 person,因此我们需要使用 ng-init 来创建它。
  • 我们需要将员工数组过滤为一名成员,因此我们使用设置为 true 的“strict”参数,通过 close.staffID 对其进行过滤,以便我们仅获得 id 所在的结果火柴。由于过滤语法的原因,此部分需要包含在 ( ) 中。
  • 最后,我们使用 [0]person 设置为匹配对象,该对象将成为数组中的第一项(项 0)。

    var app = angular.module('app', []);
        app.controller('MainCtrl', ['$scope', function ($scope) {
            $scope.staff = [
            {"id": "1","name": "Alex"},
            {"id": "2","name": "Brad"},
            {"id": "3","name": "Cam"}
        ];
            $scope.closedShop =[
                {"day": "monday","staffID": "1"},
                {"day": "wednesday","staffID": "2"},
                {"day": "thursday","staffID": "3"},
                {"day": "friday","staffID": "1"}
            ];
        }]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <div ng-controller="MainCtrl">
        <div ng-repeat="closed in closedShop">
            <span ng-init="person = (staff | filter:{id:closed.staffID}:true)[0]">{{person.name}}</span>
            closed the shop on {{closed.day}}
        </div>
    </div>
</div>

您还可以执行 ng-init="person = getPerson(close.staffID)" 并将过滤逻辑移至 Controller 中。为此,您将注入(inject)过滤器过滤器(有趣的名称),如下所示:

app.controller('MainCtrl', ['$scope', 'filterFilter', function ($scope, filter) {

然后使用这个函数:

$scope.getPerson = function(id) {
  return filter($scope.staff, {id:id}, true)[0];
};

关于javascript - 使用 ng-repeat 从对象数组中使用另一个对象的 id 属性通过 id 查找对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28690110/

相关文章:

javascript - 使用 ng-view 时 AngularJS 数组不更新

javascript - 如何让复选框在 AngularJS 中显示选中/未选中状态?

html - 数据列表奇怪的行为

javascript - 多次调用对象时的奇怪行为

javascript - 嵌套两个 Javascript 事件

javascript - 如何跟踪图像和 iframe 的盗链?

javascript - textarea.val() 值改变但不显示在页面上

javascript - Angular JQuery 时间选择器

html - 如何使用 CSS 将 html 输入文本放入图像中?

javascript - 如何在访问者退出网站时弹出