On your controller simply continue with having only information about the action and not the scroll. as the scroll is an enhancement:
$scope.buttonAction = function () {
console.log('button action');
}
In your view use the button normally but now define a directive for it to add additional scroll behaviour:
<button scrollup ng-click="buttonAction()">Click me</button>
and finally your scrolling stuff should be in that scrollup directive:
app.directive('scrollup', function ($document) {
return {
restrict: 'A',
link: function (scope, elm, attrs) {
elm.bind("click", function () {
// Maybe abstract this out in an animation service:
// Ofcourse you can replace all this with the jQ
// syntax you have above if you are using jQ
function scrollToTop(element, to, duration) {
if (duration < 0) return;
var difference = to - element.scrollTop;
var perTick = difference / duration * 10;
setTimeout(function () {
element.scrollTop = element.scrollTop + perTick;
scrollToTop(element, to, duration - 10);
}, 10);
}
// then just add dependency and call it
scrollToTop($document[0].body, 0, 400);
});
}
};
});
Now you will be able to add whatever action you need in your controllers but also have the jumping upo behaviour by adding the directive.