如何创建一个过滤器,在列出其他对象之前显示一个对象?
How do I create a filter to show one object before listing others?
我使用AngularJS来显示来自不同服务器的信息。我想过滤结果,在任何其他类别之前显示"生产"类别。
下面是我的数据结构:
cli: {code: "name",
development: { type: "development",
servers: [array here] },
production: { type: "production",
servers: [array here] },
training: { type: "training",
servers: [array here] }
}
我在创建过滤器以首先显示生产服务器时遇到了麻烦,其余部分紧随其后。
我当前的html是
<tr ng-repeat="server in cli | pdFilter">
我已经尝试创建一个过滤器来将生产服务器移到一个数组中,并推动其余部分,但在访问过滤器时,我无法访问客户端对象的子对象。下面是我的代码:
App.filter('pdFilter', [function () {
return function (cli) {
// console.log(cli);
// This outputs a valid object
if (!angular.isUndefined(cli)) {
var tempServers = [];
for(var server in cli) {
// console.log(cli[server]);
// This outputs undefined
if (angular.equals(server.type.substring(0,1), "p")) {
tempServers.unshift(server);
} else {
tempServers.push(server);
}
}
return tempServers;
} else {
return cli;
}
};
}]);
我假设我的问题是当我在cli中循环字段时,但我不确定我的问题在哪里?
谢谢
试试这个,看看是否有效:
app.filter('pdFilter', function() {
return function( items, condition) {
condition = condition || "production"
var filtered = [];
if(items === undefined){
return items;
}
angular.forEach(items, function(cli) {
if(condition === cli.type){
filtered.unshift(cli);
} else {
filtered.push(cli);
});
return filtered;
};
});
我给过滤器添加了第二个参数,所以如果以后你需要/想要在不同的条件下过滤,它更容易。然后让HTML看起来像这样:
<tr ng-repeat="server in cli | pdFilter:'production'">
除了这个答案之外,您还可以修改原始对象,使其位于列表的开头,然后在没有过滤器的情况下产生所需的结果。
您应该先放置所有生产服务器,然后再添加其余的
// list of all server types
var types = Object.keys(cli).filter(function(typeName){ return typeof cli[typeName].servers !== 'undefined'; });
// filter production
types.splice(types.indexOf('production'), 1);
// arrays of servers not in production
var arrays = types.map(function(typeName){ return cli[typeName].servers; });
// final result, concat returns new array
return cli.production.concat.apply(this, arrays);
相关文章:
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 使用同一对象中的其他变量声明变量
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 如何使用object.assign()从其他对象引用基本对象属性
- 对象获胜'如果qml中的其他地方定义了数字动画属性,则t设置动画
- 如何使用其他地方指定的访问信息访问嵌套的json对象,而不使用eval或迭代
- 对象数组-与其他列数据相比,增加一列
- PJAX:记住其他对象状态
- 以编程方式将fabric-js-canvas的图像替换为hq图像,并重新计算其他对象的坐标和大小
- AngularJS:根据其他对象预先选择ng repeat中的select元素
- 如何在 JavaScript 中访问函数中的其他属性值作为对象属性值
- 如何在 Javascript 中向数组添加其他对象
- 追加子数据 URI,替换 IE 中的其他对象
- 将 JavaScript 对象转换为其他格式
- 挖空、视图模型位于其他对象和数据绑定中
- 如何从帖子对象添加其他信息以在护照中注册用户
- getList 的响应应该是一个数组,而不是一个对象或其他东西
- 函数中的If语句会创建其他对象
- 如何在 javascript 中将变量传递给对象内的其他函数
- 将JSON对象转换为敲除observable在IE8中不起作用,但在所有其他浏览器中都起作用