You could define your controller as a class, and use the prototype to add functionnality :
var myController = function($scope){
var _this = this;
$scope.func1= function(){
_this.func1();
};
};
myController.prototype.func1 = function(){
// do something here
};
app.controller('myController', myController);
This way you will avoid "scope soup". There is a great article about it here
Note that you could also avoid $scope using the "as" keyword:
<div ng-controller="myController as ctrl">
<input ng-click="ctrl.func1()">
</div>
var myController = function(){
this.someVar = "A value";
};
myController.prototype.func1 = function(){
// do something here
};