6

I'm just trying to get my head around the basics of AngularJS. I tried writing a simple MVC app, but the controller doesn't seem to be working. The file can find the angular lib just find, I already tested that by excluding 'ng-controller'.

<!DOCTYPE html>
<html ng-app>
<head>
    <script src='js/lib/angular.js'></script>
    <script>
        // controller
        function MyFirstCtrl($scope) {
            // model
            var employees = ['Christopher Grant', 'Monica Grant', 'Christopher
            Grant', 'Jennifer Grant'];

            $scope.ourEmployees = employees;
        }
    </script>
</head>
<body ng-controller='MyFirstCtrl'>
    <!-- view -->
    <h2>Number of employees: {{ourEmployees.length}}</h2>
</body>
</html>

EDIT: The error log says the following:

Uncaught SyntaxError: Unexpected token ILLEGAL , line 9
Uncaught SyntaxError: Unexpected token { , line 19
Error: [ng:areq] Argument 'MyFirstCtrl' is not a function, got undefined

EDIT2: I changed the code to this:

<!DOCTYPE html>
<html ng-app='MVCExample'>
<head>
    <script src='js/lib/angular.js'></script>
    <script>
        var app = angular.module('MVCExample', []);

        // controller
        app.controller("MyFirstCtrl", function($scope) {

            // model
            var employees = ['Christopher Grant', 'Monica Grant', 'Christopher Grant', 'Jennifer Grant'];

            $scope.ourEmployees = employees;
        });
    </script>
</head>
<body ng-controller='MyFirstCtrl'>
    <!-- view -->
    <h2>Number of employees: {{ourEmployees.length}}</h2>
</body>
</html>

It also turned out that the 'employees' array that I had was illegal since I had one string entry split into two lines. The above works. The beginner book I am using must be outdated, which is unfortunate.

BrianRT
  • 1,952
  • 5
  • 18
  • 27
  • Can you assure me which angular js version are you using ? – Vineet Jul 10 '15 at 16:54
  • what does the error console say? Make sure there isn't an actual line break between `Christopher` and `Grant`. – Ronnie Jul 10 '15 at 16:55
  • 1
    In angular js 1.3 + versions you can't declare global controller. – Vineet Jul 10 '15 at 16:57
  • so the first error is that line break I was talking about in my first comment – Ronnie Jul 10 '15 at 17:01
  • Your code is correct. I have run your code with AngularJS v1.2.13. Its working fine. Dont have line break as @Ronnie said. – Vish Jul 10 '15 at 17:02
  • 3
    @vish please read the comments. He is using 1.4+ and 1.3+ doesn't allow global controllers so your comment is irrelevant – Ronnie Jul 10 '15 at 17:03

3 Answers3

11

If you're using angularjs 1.3+ versions then you can not declare global controller like above you're doing.

You should initialize like below.

<div ng-app="appname" ng-controller="MyFirstCtrl">
var app = angular.module('appname', []);
app.controller('MyFirstCtrl',function(){
   //controller code here
});
Pankaj Parkar
  • 134,766
  • 23
  • 234
  • 299
Vineet
  • 4,525
  • 3
  • 23
  • 42
2

I don't see how you are initialising the angularjs app, don't know if that is already included in the js file you have linked, but in principle, you should have something like this:

var app = angular.module("appName", []).controller("ControllerName", function ($scope){
  //your controller code here
});

And then have in your HTML code something like:

<html ng-app="appName">
Luis Delgado
  • 3,644
  • 4
  • 34
  • 54
-1

Add the controller to the angular application module

.module('LogIn')
.controller('LoginController', LoginController)

image

Mogsdad
  • 44,709
  • 21
  • 151
  • 275
Hrsk
  • 1