我想了解AngularJS中自定義過濾器的概念。爲此,我製作了一張我想過濾的簡單表格。 我知道我可以使用內置的Angular過濾器做簡單的過濾,但是我爲了練習目的做了這個。我知道過濾器尚未完成。它不會返回任何東西。 首先,我想解決以下問題:在Angularjs中添加對象到數組
我遇到了將對象添加到數組的問題。 array.push(對象)應該很簡單。但是在'for循環'中,前一個對象正在被新的對象替換。我不知道爲什麼會這樣。 爲了調查這個問題,我添加了一些console.log來查看(並希望瞭解)發生了什麼。但我無法弄清楚。
還有另一種行爲,我無法解釋:循環運行兩次:它再次通過相同的數組(vm.players)。有沒有人對此行爲有過解釋?
這是我angularJS腳本:
var app = angular.module('main', ['angular.filter'])
.filter('filterIns', function() {
return function(input, ins) {
var out = [];
var obj = {};
for (var i = 0; i < input.length; i++) {
if (input[i].instrument == ins) {
obj.name = input[i].name;
obj.instrument = input[i].instrument;
console.log(obj);
out.push(obj);
console.log('inside IF ' + i);
console.log(out);
}
}
}
})
.controller('DemoCtrl', function() {
var vm = this;
vm.players = [
{
"name": "Mariko",
"instrument": "horn"
}, {
"name": "Kareem",
"instrument": "cello"
}, {
"name": "Lance",
"instrument": "horn"
}, {
"name": "Gail",
"instrument": "flute"
}, {
"name": "Armand",
"instrument": "cello"
}, {
"name": "Anika",
"instrument": "flute"
}, {
"name": "Mallory",
"instrument": "clarinet"
}, {
"name": "Odysseus",
"instrument": "clarinet"
}, {
"name": "Colt",
"instrument": "cello"
}, {
"name": "Kessie",
"instrument": "violin"
}, {
"name": "Iola",
"instrument": "horn"
}
];
});
和HTML:
<!DOCTYPE html>
<html>
<head>
<script data-require="[email protected]" data-semver="1.6.5" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.min.js"></script>
<script data-require="[email protected]" data-semver="0.5.7" src="//cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.7/angular-filter.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="main">
<div ng-controller="DemoCtrl as demo">
<div>
<table border="0">
<tr>
<th>name</th>
<th>instrument</th>
</tr>
<tr ng-repeat="nr in demo.players | filterIns:'flute' ">
<td>{{nr.name }}</td>
<td>{{nr.instrument}}</td>
</tr>
</table>
</div>
</div>
</body>
</html>
請看看this plunk
看一看http://plnkr.co/edit/ZGOnEblMJudBRWkKi8u1?p=preview –
@UshmaJoshi:該訣竅:創建函數返回前一個空的對象。另外一個好處是將對象作爲一個整體添加,而不是按照我在第一個plunk中所做的那樣對每個鍵/值對進行添加。 但我仍然有這個問題:爲什麼返回函數第二次運行?我不明白這種行爲。 – Jojoseph