Angular 自定义过滤器:将值与数组中的值匹配并得到对应的名称
Angular Custom filters: match value with value in array and get corresponding name
Blockquote
我想使用 Angular 过滤器将数字转换为动物。
我有以下 ng-repeat:
<div ng-repeat="speed in speeds track by $index">
You're faster than a <span ng-bind="speed.value | speedToAnimal"></span>
</div>
speed.value 会给你一个像 42.9
这样的值
我想将此速度值与速度与动物相关联的数组中的速度值相匹配。
例如这是我的数组:
var animals = [
{
"speed": 33.7,
"animal": 'pig',
},
{
"speed": 40.2,
"animal": 'Dog',
},
{
"speed": 45.4,
"animal": 'Horse',
}
...
];
速度值42.9高于数组中狗的速度值但低于马的速度值所以我希望过滤器将值42.9变成"Dog"所以结束结果将是:你比狗快,而不是你比 42.9
我知道如何调用过滤器,但不知道如何构建过滤器。
通话过滤器:ng-bind="speed.value | speedToAnimal
过滤器:
app.filter('speedToAnimal', function() {
return function(input, optional1, optional2) {
// Do filter work here
return output;
}
});
亲爱的,
这是您的代码的工作 Fiddle:Fiddle of Your Code
- 现在,这也是您的代码:
HTML 部分:
<div ng-controller="MyCtrl">
<legend> Enter Speed</legend>
<input type="text" ng-model="speed.value" required />
<button type="button" ng-click="calc()">Get Animal</button>
<span>{{filteredAnimals}}</span>
</div>
控制器代码
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', function($scope) {
$scope.animals = [
{
"speed": 33.7,
"animal": 'pig',
},
{
"speed": 40.2,
"animal": 'Dog',
},
{
"speed": 45.4,
"animal": 'Horse',
}];
$scope.calc = function(){
$scope.curSpeed = $scope.speed.value;
var len = $scope.animals.length - 1;
var filteredAnimals;
while(len >= 0){
if($scope.curSpeed >= $scope.animals[len].speed){
filteredAnimals = $scope.filteredAnimals = $scope.animals[len].animal;
break;
}
len--;
}
}
});
谢谢和干杯
在 Amulya Kashyap 的回答的帮助下,这是我的工作解决方案:
<div ng-repeat="speed in speeds track by $index">
You're faster than a <span ng-bind="speed.value | speedToAnimal"></span>
</div>
过滤器 a 提出:
app.filter('speedToAnimal', function () {
return function (value) {
var animals = [
{"speed":12,"animal":"Field Mouse"},
{"speed":13,"animal":"House Mouse"},
{"speed":16,"animal":"Camel"},
{"speed":18,"animal":"Pig"},
{"speed":20,"animal":"Gray Squirrel"},
{"speed":22,"animal":"Sea Lion"},
{"speed":24,"animal":"Sheep"},
];
if(!animals) return;
var curSpeed = value;
var len = animals.length - 1;
while(len >= 0){
if(curSpeed >= animals[len].speed){
return animals[len].animal;
}
len--;
}
};
});
Blockquote
我想使用 Angular 过滤器将数字转换为动物。
我有以下 ng-repeat:
<div ng-repeat="speed in speeds track by $index">
You're faster than a <span ng-bind="speed.value | speedToAnimal"></span>
</div>
speed.value 会给你一个像 42.9
这样的值我想将此速度值与速度与动物相关联的数组中的速度值相匹配。
例如这是我的数组:
var animals = [
{
"speed": 33.7,
"animal": 'pig',
},
{
"speed": 40.2,
"animal": 'Dog',
},
{
"speed": 45.4,
"animal": 'Horse',
}
...
];
速度值42.9高于数组中狗的速度值但低于马的速度值所以我希望过滤器将值42.9变成"Dog"所以结束结果将是:你比狗快,而不是你比 42.9
我知道如何调用过滤器,但不知道如何构建过滤器。
通话过滤器:ng-bind="speed.value | speedToAnimal
过滤器:
app.filter('speedToAnimal', function() {
return function(input, optional1, optional2) {
// Do filter work here
return output;
}
});
亲爱的,
这是您的代码的工作 Fiddle:Fiddle of Your Code
- 现在,这也是您的代码:
HTML 部分:
<div ng-controller="MyCtrl">
<legend> Enter Speed</legend>
<input type="text" ng-model="speed.value" required />
<button type="button" ng-click="calc()">Get Animal</button>
<span>{{filteredAnimals}}</span>
</div>
控制器代码
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', function($scope) {
$scope.animals = [
{
"speed": 33.7,
"animal": 'pig',
},
{
"speed": 40.2,
"animal": 'Dog',
},
{
"speed": 45.4,
"animal": 'Horse',
}];
$scope.calc = function(){
$scope.curSpeed = $scope.speed.value;
var len = $scope.animals.length - 1;
var filteredAnimals;
while(len >= 0){
if($scope.curSpeed >= $scope.animals[len].speed){
filteredAnimals = $scope.filteredAnimals = $scope.animals[len].animal;
break;
}
len--;
}
}
});
谢谢和干杯
在 Amulya Kashyap 的回答的帮助下,这是我的工作解决方案:
<div ng-repeat="speed in speeds track by $index">
You're faster than a <span ng-bind="speed.value | speedToAnimal"></span>
</div>
过滤器 a 提出:
app.filter('speedToAnimal', function () {
return function (value) {
var animals = [
{"speed":12,"animal":"Field Mouse"},
{"speed":13,"animal":"House Mouse"},
{"speed":16,"animal":"Camel"},
{"speed":18,"animal":"Pig"},
{"speed":20,"animal":"Gray Squirrel"},
{"speed":22,"animal":"Sea Lion"},
{"speed":24,"animal":"Sheep"},
];
if(!animals) return;
var curSpeed = value;
var len = animals.length - 1;
while(len >= 0){
if(curSpeed >= animals[len].speed){
return animals[len].animal;
}
len--;
}
};
});