2012-06-26 96 views
44

我對AngularJS仍然很新,並且正在設置我的第一個應用程序。我想能夠做到以下幾點:使用AngularJS控制器創建與angular.module()。控制器()

angular.module('App.controllers', []) 
    .controller('home', function() { 
    $scope.property = true; 
    }]); 

angular.module('App', ['App.controllers']) 
    .config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/', {templateUrl: 'partials/home.html', controller: home}); 
    }]); 

使用這種設置會產生以下錯誤:

Uncaught ReferenceError: home is not defined from App 

我的問題是:我如何註冊(直接或$controllerProvider.register())使用angular.module.controller()控制器並在我的應用的其他地方使用註冊的控制器。

我的動機:我想避免使用全局構造函數作爲我的控制器(如angularjs.org使用的大多數示例)或複雜的命名空間。如果我可以註冊並使用控制器作爲單個變量名稱(不在全局範圍內),那將是理想的。

回答

75

嘗試使用字符串標識符。

routeProvider.when('/', {templateUrl: 'partials/home.html', controller: 'home'});

當你使用一個文字,它正在尋找一個叫做home變量,但這並不在這種情況下存在。

+1

謝謝,這確實起作用。很簡單。 –

+1

上述解決方案似乎不工作......我得到「錯誤:參數'PhoneListCtrl'不是一個函數,得到字符串」。幫幫我! – mpowered

+24

如果將控制器定義爲函數(函數PhoneListCtrl(){}'),則必須將其作爲函數來引用。如果使用.controller('app.controller('PhoneListCtrl',function(){})'定義它,則應該將其引用爲字符串。 –