更新在底部 我寫了一個過濾器來管理我在我的ng重複取代。但是,當返回的數據應該是一個空數組時,在IE 9 +中我會崩潰,但在FF和Chrome中它工作正常。自定義角度過濾器崩潰IE 9+
BuildFilter下面從angular.module('app').filter(filterId, buildFilter);
function buildFilter() {
return function (input, limitTo, keyWords) {
var outputPre = [];
var outputPost = [];
var d = new Date();
console.log('filter event: '
+ d.getHours() + ":"
+ d.getMinutes() + ":"
+ d.getSeconds());
var outputPre = [];
if (!(limitTo === null
|| limitTo === undefined
|| limitTo === '')) {
for (var i = 0; i < input.length; i++) {
if (input[i] !== null && input[i] !== undefined) {
switch (limitTo) {
case 'edi':
if (input[i].dateReleased === null) {
outputPre.push(input[i]);
}
break;
case 'rel':
if (input[i].dateReleased !== null
&& input[i].dateRetired === null) {
outputPre.push(input[i]);
}
break;
case 'ret':
if (input[i].dateRetired !== null) {
outputPre.push(input[i]);
}
break;
default:
outputPre.push(input[i]);
}
}
}
}
else {
for (var i = 0; i < input.length; i++) {
outputPre.push(input[i]);
}
}
//Sanity Check Log Entry
console.log('pre count: ' + outputPre.length);
if (!(keyWords === null
|| keyWords === undefined
|| keyWords === '')) {
var tkw = keyWords.toLocaleLowerCase();
for (var i = 0; i < outputPre.length; i++) {
var tn = outputPre[i].name.toLocaleLowerCase();
if (tn.indexOf(tkw) > -1) {
outputPost.push(outputPre[i]);
}
}
}
else {
for (var i = 0; i < outputPre.length; i++) {
outputPost.push(outputPre[i]);
}
}
//Sanity Check Log Entry
console.log('post count: ' + outputPost.length);
return outputPost;
};
};
我的採樣數據稱爲是:
var data= [ //for input
{
id: 0,
dateCreated: '1/1/2014',
dateReleased: null,
dateRetired: null,
name: 'Sample Data',
},
{
id: 1,
dateCreated: '1/1/2014',
dateReleased: null,
dateRetired: null,
name: 'Other Sample Data',
},
]
limitTo
支持以下值: 'EDI' '相對', '保留'
keyWords
只是任何字符串。它只是看看字符串的任何部分是否在名稱字段中。
更新到: 將代碼縮小到以下內容。
function isEdi(obj) {
if ((obj.dateReleased === null)
&& (obj.dateRetired === null)) {
return true;
}
return false;
}
function isRel(obj) {
if ((obj.dateReleased !== null)
&& (obj.dateRetired === null)) {
return true;
}
return false;
}
function isRet(obj) {
if ((obj.dateReleased !== null)
&& (obj.dateRetired !== null)) {
return true;
}
return false;
}
function buildFilter() {
return function (input, limitTo) {
var output = [];
switch (limitTo) {
case 'edi':
output = input.filter(isEdi);
break;
case 'rel':
output = input.filter(isRel);
break;
case 'ret':
output = input.filter(isRet);
break;
default:
output = input;
}
return output;
};
};
IE崩潰時返回的是[],但工作正常,如果返回爲至少1結果。
2ns的更新到帖子:
改變了重複到ng-repeat="obj in objlist | filter:getObJFilter(objFilter) | orderBy:['+dateRetired','+dateReleased','+name']">
objFilter
是一個參數,以獲得過濾功能傳遞給過濾。這樣我只是擴展本地過濾器,而不是創建一個新的過濾器。
所以我的控制器包含以下內容。
$scope.getFilter = function (val) {
switch (val) {
case 'edi':
return isEdi();
break;
case 'rel':
return isRel();
break;
case 'ret':
return isRet();
break;
default:
return function (obj) {return true };
}
}
function isEdi() {
return function(obj){
if ((obj.dateReleased === null)
&& (obj.dateRetired === null)) {
return true;
}
return false;
}}
function isRel() {
return function (obj) {
if ((obj.dateReleased !== null)
&& (obj.dateRetired === null)) {
return true;
}
return false;
}
}
function isRet() {
return function (obj) {
if ((obj.dateReleased !== null)
&& (obj.dateRetired !== null)) {
return true;
}
return false;
}
}
我認爲我所做的一切,我可以消除過濾器作爲的問題。所以我現在到了我認爲在IE中呈現空集的問題。
我會在Plunkr今晚發佈完整的測試示例。
注意:我也使用AngularUI和Angular進行UI Bootstrap。獲取所需指令的捷徑。但是,我在其他問題上遇到了UI Bootstrap的問題,所以我將替換更多的組件來隔離問題。
第3次更新我已經刪除了所有第三方指令。我確實有UI Bootstrap來支持TBS,所以爲了保存我的理智,我排除了這一點。
我已經將此作爲bug提交給Angular.js人員,並將提交給MS,因爲瀏覽器在任何情況下都不應該崩潰。 https://github.com/angular/angular.js/issues/7159 – Brian
MS崩潰報告https://connect.microsoft.com/IE/feedback/details/856775/browser-crash-when-it-doesnt -like-an-angular-js-event – Brian
添加了一個plunker頁面。但是,頁面並未觸發問題。所以我慢慢地加入其他功能,直到我崩潰。 http://plnkr.co/edit/oCLDKeCEmtuf4FwpURy3 – Brian