Принцип уже был предложен @ Эдди Ховардом. Вы можете поместить функциональность в директиву для удобства, что-то вроде этого (хотя это не оптимальное решение):
.directive('posButton', function() {
return {
restrict: 'E',
scope: {
onClick: '=onClick',
position: '=pos'
},
template: '<button ng-click="onClick()">foo</button>',
link: function(scope, element, attrs) {
element.css({
visibility: 'hidden',
position: 'absolute',
top: '0px',
left: '0px'
});
scope.$watch('position', function(){
if(scope.position.length > 0) move(scope.position);
}, true);
function move(pos){
element.css({
visibility: 'visible',
left: pos[0] + 'px',
top: pos[1] + 'px'
});
}
}
};
});
Вот рабочий Плункер .