使用带有 ng-repeat 的对象数组中的另一个对象的 id 属性 按 id 查找对象
Find object by id using another object's id property from array of objects with ng-repeat
我的范围内有以下数据模型。
$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"}
];
我想做的是输出哪位员工每天关门,所以根据上面我的理想输出就是。
Alex 星期一关店
Brad 星期三关店
Cam 星期四关门
亚历克斯周五关店
我遇到的问题是 closedShop 数据只包含 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>
实现此功能的最佳方法是什么?
您可以添加到您的控制器函数以获取 staffById。
$scope.getStaff = function(id){find and return}
并改变你的看法:
<div ng-app="app">
<div ng-controller="MainCtrl">
<div ng-repeat="closed in closedShop">
<span>{{getStaff(closed.staffID)}}</span>
closed the shop on {{closed.day}}
</div>
</div>
</div>
可能这不是您所期望的,但工作正常:
HTML :
<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-repeat="s in staff" ng-if="s.id==closed.staffID">
{{s.name}}
</span>
closed the shop on {{closed.day}}
</div>
</div>
</div>
<script src="app.js"></script>
JS:
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"}
];
}]);
看到这个plunkr
这部分是钱:
<span ng-init="person = (staff | filter:{id:closed.staffID}:true)[0]">{{person.name}}</span>
这可能是不言自明的,但我会详细说明以防有帮助。
- 您想显示单个员工的属性,所以我将从
{{person.name}}
开始。
- 然后,我们需要得到一个变量
person
,所以我们需要使用ng-init
来创建它。
- 我们需要将员工数组过滤为一个成员,因此我们通过
closed.staffID
将其过滤掉,使用 "strict" 参数设置为 true 以便我们只获得 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(closed.staffID)"
并将过滤逻辑移动到控制器中。为此,您将注入过滤器 filter(有趣的名称),如下所示:
app.controller('MainCtrl', ['$scope', 'filterFilter', function ($scope, filter) {
然后使用这个函数:
$scope.getPerson = function(id) {
return filter($scope.staff, {id:id}, true)[0];
};
我的范围内有以下数据模型。
$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"}
];
我想做的是输出哪位员工每天关门,所以根据上面我的理想输出就是。
Alex 星期一关店
Brad 星期三关店
Cam 星期四关门
亚历克斯周五关店
我遇到的问题是 closedShop 数据只包含 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>
实现此功能的最佳方法是什么?
您可以添加到您的控制器函数以获取 staffById。
$scope.getStaff = function(id){find and return}
并改变你的看法:
<div ng-app="app">
<div ng-controller="MainCtrl">
<div ng-repeat="closed in closedShop">
<span>{{getStaff(closed.staffID)}}</span>
closed the shop on {{closed.day}}
</div>
</div>
</div>
可能这不是您所期望的,但工作正常:
HTML :
<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-repeat="s in staff" ng-if="s.id==closed.staffID">
{{s.name}}
</span>
closed the shop on {{closed.day}}
</div>
</div>
</div>
<script src="app.js"></script>
JS:
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"}
];
}]);
看到这个plunkr
这部分是钱:
<span ng-init="person = (staff | filter:{id:closed.staffID}:true)[0]">{{person.name}}</span>
这可能是不言自明的,但我会详细说明以防有帮助。
- 您想显示单个员工的属性,所以我将从
{{person.name}}
开始。 - 然后,我们需要得到一个变量
person
,所以我们需要使用ng-init
来创建它。 - 我们需要将员工数组过滤为一个成员,因此我们通过
closed.staffID
将其过滤掉,使用 "strict" 参数设置为 true 以便我们只获得 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(closed.staffID)"
并将过滤逻辑移动到控制器中。为此,您将注入过滤器 filter(有趣的名称),如下所示:
app.controller('MainCtrl', ['$scope', 'filterFilter', function ($scope, filter) {
然后使用这个函数:
$scope.getPerson = function(id) {
return filter($scope.staff, {id:id}, true)[0];
};