2012-08-07 83 views
2

我想用angular.js使用種子應用程序獲得我的腳。

當瀏覽器執行我的控制,我得到以下錯誤:

TypeError: Cannot set property 'players' of undefined 
at new bankC (http://localhost:8888/monopoly/js/controllers.js:18:20) 
at invoke (http://localhost:8888/monopoly/lib/angular/angular.js:2795:28) 
at Object.instantiate (http://localhost:8888/monopoly/lib/angular/angular.js:2805:23) 
at http://localhost:8888/monopoly/lib/angular/angular.js:4620:24 
at update (http://localhost:8888/monopoly/lib/angular/angular.js:13692:26) 
at http://localhost:8888/monopoly/lib/angular/angular.js:8002:24 
at Array.forEach (native) 
at forEach (http://localhost:8888/monopoly/lib/angular/angular.js:110:11) 
at Object.Scope.$broadcast (http://localhost:8888/monopoly/lib/angular/angular.js:8000:11) 
at http://localhost:8888/monopoly/lib/angular/angular.js:7185:26 

這是控制器代碼是controller.js文件

function bankC($scope) { 
    $scope.players = [ 
     { 
     id: 0, 
     name: "Playe1", 
     balance: 1500 
     }, 
     { 
     id: 1, 
     name: "Player2", 
     balance: 1500 
     }, 
     { 
     id: 2, 
     name: "Player 3", 
     balance: 1500 
     } 
    ]; 
} 
bankC.$inject = []; 

感謝

編輯:

它以角度js註冊以便在某個「頁面」上使用,

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives']). 
config(['$routeProvider', function ($routeProvider) { 
    $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: MyCtrl1}); 
    $routeProvider.when('/view2', {templateUrl: 'partials/partial2.html', controller: MyCtrl2}); 
    $routeProvider.when('/bank', {templateUrl: 'partials/bank.html', controller: bankC}); 
    $routeProvider.otherwise({redirectTo: '/bank'}); 
}]); 

EDIT2:

卸下 「bankC $注入= [];」從控制器文件解決了問題,那麼爲什麼angular.js種子應用程序包含它?

+0

你確定你是用一個已定義的參數調用該函數,而不是未定義的嗎? – sedran 2012-08-07 13:47:22

+0

我將如何在angularjs中定義參數?這可能是我會出錯的地方.... – Cooltrooper 2012-08-07 13:52:52

+0

'bankC'函數是如何調用的? – jbabey 2012-08-07 13:56:07

回答

9

你得到,因爲最後一行

bankC.$inject = []; 

這告訴角度注射器沒有注入到控制器,而控制器尋找$範圍的錯誤。

如果您更改爲

bankC.$inject = ['$scope']; 

它應該工作的罰款。

最後一行存在,因爲角使用了Dependancy Injection。當您在控制器中請求角度時,Angular將查找名稱爲$ scope的變量。但是,如果代碼被縮小,那麼混淆會將$ scope的名稱更改爲其他名稱。爲了在引入最後一行時發生這種情況,保持清醒。當你聲明一個新的控制器時,最好的做法是將最後一行包含你想要angulars DI注入到控制器中的所有變量。

注意:如果您有興趣將更多東西注入到控制器(或類似的控制器),那麼您將不得不更新bankC。$ inject。

+0

應該angularjs自動做到這一點,因爲我已經註冊該控制器與該網址頁面? – Cooltrooper 2012-08-07 14:07:23

+0

Angular自動調用/實例化相應的控制器。 如果您提供您的html或您的app.js,那麼您會引用bankC,這將是一件好事。 – ganaraj 2012-08-07 14:10:32

+0

即時通訊使用partials,所以控制器沒有在任何HTML註冊,它是在我已經添加到我原來的問題的app.js註冊。 – Cooltrooper 2012-08-07 14:12:34