2015-06-01 74 views
2

我加入一个指令到我的网站时,遇到下列错误,当控制器是不确定的:在角:增加一个指令

Error: [ng:areq] Argument 'MainController' is not a function, got undefined 

仅发生的错误,当我包括欢迎-指令(welcome.js)我现场。如果导入已被删除,则控制器工作。

身体我的index.html

<body ng-app="my-app"> 
    <div ng-controller="MainController"> 
    <welcome></welcome> 
    </div> 

    <!-- Angular --> 
    <script src="bower_components/angular/angular.js"></script> 
    <script src="js/app.js"></script> 
    <script src="js/controllers/mainController.js"></script> 
    <!-- Without this line the controller works --> 
    <script src="js/directives/welcome.js"></script> 
</body> 

的app.js

(function() { 
    var app = angular.module('my-app', []); 
})(); 

mainController.js

angular.module('my-app', []) 
    .controller('MainController', ['$scope', function($scope) { 
    console.log('Controller working'); 
    }]); 

welcome.js

angular.module('my-app', []) 
    .directive("welcome", function() { 
    return { 
     restrict: "E", 
     template: "<div>Test test.</div>" 
    }; 
    }); 

回答

6

您正在重新定义模块。只定义模块一次。

当作为angular.module('my-app', [])使用时,它定义了模块只能使用一次。当你想要检索它。然后用angular.module('my-app')

使用

angular.module('my-app') //Notice remove [] 
    .directive("welcome", function() { 
    }); 
+1

。 –

+0

谢谢,就是这样!当我没有依赖关系时,是否总是省略括号? – fwind

+0

@fwind,您需要在整个应用程序中定义模块一次,并且在模块级别具有任何依赖关系。 – Satpal

3

传递第二个参数是这样angular.module('my-app', [])创建一个新的模块,用它只有一次。

以检索一个模块使用var module = angular.module('my-app'),并在控制器和指令定义都使用module.controller(...module.directive(....等,