Ответ 1
С последними версиями Angular ( > 1.3.0) вы не можете объявить глобальную конструкторскую функцию и использовать ее с ng-контроллером.
Быстрое исправление будет заключаться в создании модуля Angular и добавлении MainController в качестве контроллера.
Здесь я завернул MainController в IIFE, чтобы предотвратить добавление функции в качестве глобальной:
(function() {
angular
.module("appName", [])
.controller("MainController", MainController);
MainController.$inject = ["$scope"];
function MainController($scope) {
$scope.message = "Hello, Michael";
};
})();
В вашем HTML вам нужно добавить имя модуля Angular в директиву ng-app:
<!DOCTYPE html>
<html ng-app="appName">
<head>
<!--Works with latest Stable Build-->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<!--Does not work with Latest Beta-->
<!--UNCOMMENT ME! <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.18/angular.min.js"></script>-->
<script src="script.js"></script>
</head>
<body ng-controller="MainController">
<h1>Angular Playground</h1>
{{message}}
<br />Total Length: {{message.length}}
</body>
</html>