2014-11-25 53 views
0

我試圖讓我的第一個真正的MEAN棧工作,所以這可能是一個新手的錯誤。'angular'未定義(腳本未鏈接在一起)

爲什麼在app.js的角模塊和controllers.js預先剩餘未定義(「角」沒有定義,「PollListCtrl」沒有被定義,等)

非常感謝的功能!

這裏是index.jade

extends layout 

doctype html 

html(lang='en', ng-app='polls') 
block content 
    p Welcome to #{title} 
    head 
     meta(charset='utf-8') 
     meta(name='viewport', content='width=device-width, initial-scale=1, user-scalable=no') 
     title= title 
     script(src='https://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.js') 
     script(src='//ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular-resource.js') 
     script(src='/public/js/controllers.js') 
     link(rel='stylesheet', href='//netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.css') 
     link(rel='stylesheet', href='/stylesheets/style.css') 
     script(src='/public/js/services.js') 
     script(src='/public/js/app.js') 
    body(ng-controller='PollListCtrl') 
     nav.navbar.navbar-inverse.navbar-fixed-top(role='navigation') 
      div.navbar-header 
       a.navbar-brand(href='#/poll')= title 
      div.container 
       div(ng-view) 

和controller.js

function PollListCtrl($scope, Poll) { 
     $scope.polls = Poll.query(); 
    } 

的第一線......和app.js

angular.module('polls', ['pollServices']).config(['$routeProvider', function($routeProvider) { 
$routeProvider.when('/polls', { templateUrl: 'partials/list.html', controller: 
PollListCtrl }).when('/poll/:pollId', { templateUrl: 'partials/item.html', controller: 
PollItemCtrl }). when('/new', { templateUrl: 'partials/new.html', controller: 
PollNewCtrl }).otherwise({ redirectTo: '/polls' }); 
}]); 
+0

沒有什麼太瘋狂的東西讓我跳出來,但我對玉的經驗有限。我會在services/controllers/etc之前包含app.js,但我不認爲這是一個突破性問題(我可能是錯的)。你確定angular.js文件被成功加載嗎?檢查開發控制檯的網絡選項卡,如果它在那裏,請嘗試加載角度文件並查看window.angular以查看是否存在。 – dvlsg 2014-11-25 00:56:46

+0

這確實不是問題,因爲他得到了一個Angular未定義的錯誤,在他的應用程序之前加載。但是,加載應用程序集的順序很重要,應用程序聲明(app.js)必須在任何控制器,指令,服務等之前加載,因爲它們需要掛接到應用程序實例上。首先聲明angular.module('myApp',[]);然後在那之後你可以聲明angular.module('myApp')。controller('myController',[]);反過來顯然不會工作。我會作爲@dvlsg說檢查你的網絡窗口,看看角度是否加載。 – iH8 2014-11-25 02:23:16

回答

0

你有幾個在這裏需要清理的問題。

  • 首先,您需要在angular.js之後引用您的app.js,但在可能使用它的任何其他模塊之前。
  • 其次,您的應用程序的簽名設置不正確。您需要將angular.module 分配給一個變量,即:var polls = angular.module('polls', ...
  • 您的控制器簽名也不正確。爲了讓控制器訪問您的應用程序的資源,它需要在您的應用程序模塊上定義。 polls.controller('pollListCtrl', [$scope, function($scope) { ...

另外請注意,控制器名稱一般不以大寫字母開頭。

希望能讓你更有一點成就,但我強烈建議您閱讀Angular.js Tutorial,以便讓您對角色做事有更好的感覺。

編輯

正如指出的那樣,作爲替代,你可以跳到一個變量分配您的應用程序,然後完全引用應用程序掛接的控制器時:

angular.module('polls').controller('pollListCtrl', [$scope, function($scope){ 
... 

最示例將顯示第一種形式,但很多人認爲更明確的設計是更好的做法。

+0

使用.Controller聲明控制器將不起作用,.controller會。而且,絕對不需要將應用程序實例分配給變量,因爲範圍解析甚至不鼓勵它。 Instanciating像angular.module('myApp'),然後掛鉤你的控制器,指令和類似的應用程序:angular.module('myApp').controller('myController')非常好,甚至比聲明範圍內的所有東西。 – iH8 2014-11-25 01:58:58