In angularjs, we define our controllers into window. While this would not create name clashes with other js modules and plugins, it is still not a good practise: a single application should expose a single object to the global namespace.
This is the usual way, defined in window:
function UserController($scope) { ... }
HTML:
<div ng-controller="UserController">
This is what I think of:
myApp.UserController = function ($scope) { ... };
So in that case, I should be initiating controller from html like this
<div ng-controller="myApp.UserController">
What do you think?
One of the ways around it is to define it within Angular itself such as the way you described. In other words:
angular.module('YourApp').controller('ControllerName', function($scope) {})
I have confirmed the above method doesn’t pollute the global namespace.
Edit: You also don’t need to use
<div ng-controller="myApp.UserController">as you could define myApp in the attribute ng-app:<body ng-app="myApp">That way you could call the ng-controller without prefixing myApp every time.