0
カスタムフィルタを使用して複数の条件を1つの列にフィルタリングしました。コードはPlunkrで動作しますが、エディタから出力するときには使用しません
var app = angular.module('main', ['angular.filter'])
.filter('filterIns', function() {
var obj = {};
return function(list, ins) {
var out = [];
for (var i = 0; i < list.length; i++) {
if (ins.indexOf(list[i].instrument) > -1) {
obj = list[i];
out.push(obj);
}
}
if (ins.length === 0) {
out = list;
}
return out;
};
})
[...]
をしたすべてが期待通りに働いています。しかし、このコードを私のlocalhost環境にコピーすると、11行目を参照すると、未定義のオブジェクト(評価された 'list.length') 'というエラーが発生します。
なぜ完全に動作しているのですか? Plunkrではlocalhostではなく?誰でも教えてもらえますか?
実際、私のリストは$ HTTPリクエストを介して非同期に読み込まれています。私のカスタムフィルターは、リストがロードされる前にロードされているようです。それは私が得るエラーを説明することができます。カスタムフィルタをロードする前にリストをロードすることは可能ですか? – Jojoseph
条件の代わりに、リストに要素が含まれているかどうかを確認するif文を挿入しました。だから私はした:if(list){...残りのフィルタコード...} – Jojoseph
あなたのデータは、そのデータ(フィルタ)をフィルタリングするコードの前に読み込まれて表示されることはありません...それはナンセンスです。防御的にプログラムを作成し、非同期操作を処理するときはデータが未定義であることを考慮に入れてください。 あなたは 'if(!list){return undefined;と同じことをしました。 } '。たぶん、もっと良いのは 'if(!list){return list; } ' – smajl