
Security News
Socket for Origin Now Available
Socket for Origin scans dependency changes in pull requests and flags security risks based on your team’s policies. Now available in Cursor’s App Marketplace.
veasy-angular-components
Advanced tools
* Veasy Moment Format * Veasy Calendar * Veasy Datepicker (pending) * Veasy Table * Veasy Modal (pending) * Veasy Input Search (pending)
AngularJS directive to create quickly data tables without giving up the beauty and functionality.

$ bower install angular-veasy-table --save
angular.module('yourModule', ['veasy.table'])
.controller('yourController', function() {
$scope.config = {
// This 'id' is not necessary. Use it only if you want to set a specific id for this component.
// If you not set a specific id, it will be randomly generated.
id: 'my-specific-id',
// Columns configuration
columns: [
{
// That's the label of your column.
header: 'Id',
// That's the field of your column, and it's used to get value
// from your result array.
value: 'id',
// This property is used to add to this column a dropdown filter.
dropdown: true,
// This property is used to define the default value to the column when necessary.
// The default value will be applied when the column value is: undefined, null, false or '' (empty string).
default: 'Not Informed',
// It's used only if you want to hide this column in a specific screen size.
// The screen sizes are separated by spaces.
// Ex: hideOn: 'lg md sm xs'.
hideOn: 'xs',
// It's used only if you want to apply an angular filter to this column.
filter: {
type: 'number',
fractionSize: 0
},
// It's used to define percentual size to the column.
size: 5
},
{ header: 'First Name', value: 'first_name' },
{ header: 'Last Name', value: 'last_name', hideOn: 'xs' },
{ header: 'Email', value: 'email', hideOn: 'sm xs' },
{ header: 'Gender', value: 'gender', hideOn: 'sm xs' },
{ header: 'Money', value: 'money', hideOn: 'xs', filter: { type: 'currency', symbol: 'R$', fractionSize: 2 } },
{ header: 'Date', value: 'date', hideOn: 'lg md sm xs', filter: { type: 'date', format: 'dd/MM/yyyy HH:mm:ss' } }
]
};
});
<head>
<link rel="stylesheet" href="bower_components/angular-veasy-table/dist/css/veasy-table.min.css" media="screen" charset="utf-8"/>
</head>
<body>
...
<veasy-table list="items" config="config"></veasy-table>
...
<script src="bower_components/angular-veasy-table/dist/js/veasy-table-tpls.min.js" charset="utf-8"></script>
<script src="bower_components/angular-veasy-table/dist/js/veasy-table.min.js" charset="utf-8"></script>
</body>
All of these configurations, you need put inside your config object, like '$scope.config'.
toggleColumns: {
enable: true, // Enable this feature. (Default is false).
position: 'begin', // Use it if you want to put the 'toggle' icon at the begin of the table. Default is undefined.
icons: { // Use it if you want to replace the default icons.
opened: 'fa fa-chevron-down',
closed: 'fa fa-chevron-right'
}
}
contextMenu: {
enable: true, // Enable this feature. (Default is false).
icon: 'fa fa-ellipsis-v', // Use it to set an icon to your menu.
options: [
{
icon: 'fa fa-trash-o', // Use it to set an icon to your menu item.
label: 'Delete', // Use it to set a text to your menu item.
action: function(row) { // Use it to set a action to your menu item. The first parameter aways will be the selected row.
...
alert('Your row has been deleted!');
}
}
]
}
pagination: {
enable: true, // Enable this feature. (Default is false).
currentPage: 0, // Load in current page. (Default is 0)
itemsPerPage: 10, // How many items per page you want to see. Minimum is 1 and maximum is 50. (Default is 10)
}
filter: {
enable: true, // Enable this feature. (Default is false).
conditional: true, // Conditional filter 'AND' or 'OR'. (Default is AND)
isCaseSensitive: false, // To make the query case sensitive (Default is true)
ignoreSpecialCharacters: true, // To ignore special characters and accentuations (Default is false)
delay: 300 // Delay in milliseconds. (Default is 300ms)
}
columnFilter: {
enable: true, // Enable this feature. (Default is false).
modalOptions: {
size: 'md', // The size of modal: 'sm', 'md' or 'lg'. (Default is 'md')
autoOpen: false, // Open automatically column filter modal, if not have visible columns. (Default is false)
keyboard: true, // Enable to use keyboard on filter modal. (Default is true)
backdrop: true // Enable to use backdrop on filter modal. (Default is true)
}
}
clickRow: {
enable: true // Enable this feature. (Default is false).
}
checkbox: {
enable: true, // Enable this feature. (Default is false).
}
sort: {
enable: true // Enable this feature. (Default is false).
}
labels: {
filter: {
by: 'Filtrar por...',
all: 'Todas',
and: 'E',
or: 'OU'
},
pagination: {
itemsPerPage: 'Itens por Página',
totalItems: 'Total de Itens'
},
modal: {
title: 'Quais colunas você deseja exibir?',
okButton: 'Aplicar',
cancelButton: 'Cancelar'
}
}
All of veasy-table events are use $emit, and to listen these events you need to use $on
$scope.$on('veasyTable:onClickRow', function(event, data) {
console.log('Some row was clicked', data);
});
$scope.$on('veasyTable:selectedItems', function(event, data) {
console.log('Some items were selected', data);
});
$scope.$on('veasyTable:onApplyColumnFilter', function(event, data) {
console.log('Some columns was applied', data);
});
$scope.$on('veasyTable:onStartPagination', function(event) {
console.log('Pagination event was started');
});
$scope.$on('veasyTable:onEndPagination', function(event) {
console.log('Pagination event was done');
});
$scope.$on('veasyTable:onStartSearch', function(event) {
console.log('Search event was started');
});
$scope.$on('veasyTable:onEndSearch', function(event) {
console.log('Search event was done');
});
$scope.$on('veasyTable:onStartSort', function(event) {
console.log('Sort event was started');
});
$scope.$on('veasyTable:onEndSort', function(event) {
console.log('Sort event was done');
});
All of these configurations, you need put inside your target column, in your $scope.config object.
filter: {
name: 'currency',
symbol: 'R$',
fractionSize: 0
}
filter: {
name: 'date',
format: 'dd/MM/yyyy HH:mm:ss',
timezone: ''
}
filter: {
name: 'json',
spacing: 2
}
filter: {
name: 'number',
fractionSize: 2
}
filter: {
name: 'limitTo',
limit: 10,
begin: 0
}
filter: {
name: 'lowercase'
}
filter: {
name: 'uppercase'
}
filter: {
name: 'url',
text: '',
target: '_blank'
}
Just remove the 'selected-items' property
<!-- from -->
<veasy-table config="config" list="resultList" selected-items="selectedItems"></veasy-table>
<!-- to -->
<veasy-table config="config" list="resultList"></veasy-table>
// FROM
angular.module('yourModule', [ 'veasyTable' ]);
// TO
angular.module('yourModule', [ 'veasy.table' ]);
// FROM
columns: [
{
header: 'Id',
value: 'id',
size: 5
// TODO: REMOVE
// show: true
}
]
// TO
columns: [
{
header: 'Id',
value: 'id',
size: 5,
// Use something like this, if you want to use responsive columns and/or angular filters
hideOn: 'lg md sm xs',
filter: { type: 'number', fractionSize: 0 }
}
]
// FROM
checkbox: {
enable: true
// TODO: REMOVE
// size: 20
}
// TO
checkbox: {
enable: true
}
// FROM
columnFilter: {
enable: true,
// TODO: MOVE
// autoOpen: true,
// TODO: MOVE and RENAME
// modalSize: 'md'
}
// TO
columnFilter: {
enable: true,
modalOptions: {
size: 'md',
autoOpen: false,
keyboard: true,
backdrop: true
}
}
// TODO: REMOVE
// resizable: {
// enable: true,
// minimumSize: 5
// },
// FROM
translate: {
filter: {
by: 'Filtrar por...',
and: 'E',
or: 'OU'
},
pagination: {
itemsByPage: 'Itens por Página',
totalItems: 'Total de Itens'
},
columnFilter: {
title: 'Quais colunas você deseja exibir?',
okButton: 'Ok',
cancelButton: 'Cancelar'
}
}
// TO
labels: {
filter: {
by: 'Filtrar por...',
all: 'Todas',
and: 'E',
or: 'OU'
},
pagination: {
itemsPerPage: 'Itens por Página',
totalItems: 'Total de Itens'
},
modal: {
title: 'Quais colunas você deseja exibir?',
okButton: 'Aplicar',
cancelButton: 'Cancelar'
}
}
// FROM
// TODO: REMOVE
// events: {
// onClickRow: function(row) {
// alert('Row Clicked: ' + JSON.stringify(row.id) + '. More details in your console.');
// console.log(JSON.stringify(row, null, 2));
// console.log('---------------------------------');
// console.log('');
// },
// onApplyColumnFilter: function(columns) {
// alert('Applied Columns! More details in your console.');
// console.log(JSON.stringify(columns, null, 2));
// console.log('---------------------------------');
// console.log('');
// },
// onTableStateChange: function(columns) {
// alert('State changed! More details in your console.');
// console.log(JSON.stringify(columns, null, 2));
// console.log('---------------------------------');
// console.log('');
// }
// }
// TO
$scope.$on('veasyTable:onClickRow', function(event, data) {
console.log('Some row was clicked', data);
});
$scope.$on('veasyTable:onApplyColumnFilter', function(event, data) {
console.log('Some columns was applied', data);
});
FAQs
* Veasy Moment Format * Veasy Calendar * Veasy Datepicker (pending) * Veasy Table * Veasy Modal (pending) * Veasy Input Search (pending)
We found that veasy-angular-components demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.

Security News
Socket for Origin scans dependency changes in pull requests and flags security risks based on your team’s policies. Now available in Cursor’s App Marketplace.

Security News
Agent Baseline’s new reference architecture shows how to secure software factories with four boundaries enforced outside the AI agent.

Security News
arXiv now limits authors to two submissions a month as AI slop overwhelms moderators, delays good papers, and sparks debate over applying the limit to everyone.