concat:bar
<li ng-repeat="item in foo | concat:bar">{{item.name}}</li>
app.filter('concat', [function () {
return function (collection, joined) {
if (isUndefined(joined)) {
return collection;
}
if (isArray(collection)) {
return (isObject(joined))
? collection.concat(toArray(joined))
: collection.concat(joined);
}
if (isObject(collection)) {
var array = toArray(collection);
return (isObject(joined))
? array.concat(toArray(joined))
: array.concat(joined);
}
return collection;
};
}]);
concatMulti:bar:hoge
<li ng-repeat="item in foo | concatMulti:bar:hoge">{{item.name}}</li>
app.filter('concatMulti', [function () {
return function (collection, joined) {
if (isUndefined(joined)) {
return collection;
}
var result = [];
for (var i = 1; i < arguments.length; i++) {
result = (isObject(arguments[i]))
? result.concat(toArray(arguments[i]))
: result.concat(arguments[i]);
}
if (isArray(collection)) {
return (isObject(result))
? collection.concat(toArray(result))
: collection.concat(result);
}
if (isObject(collection)) {
var array = toArray(collection);
return (isObject(result))
? array.concat(toArray(result))
: array.concat(result);
}
return collection;
};
}]);
other script
var app = angular.module('app', []),
isDefined = angular.isDefined,
isUndefined = angular.isUndefined,
isObject = angular.isObject,
isArray = angular.isArray;
function toArray(object) {
return isArray(object) ? object :
Object.keys(object).map(function (key) {
return object[key];
});
}
app.controller('Ctrl', function ($scope) {
$scope.foo = [
{
name: 'foo1'
},
{
name: 'foo2'
}
];
$scope.bar = [
{
name: 'bar1'
},
{
name: 'bar2'
}
];
$scope.hoge = [
{
name: 'hoge1'
},
{
name: 'hoge2'
}
];
});