Angularjs : 오류 : [ng : areq] 인수 'HomeController'가 함수가 아니므로 정의되지 않았습니다.


109

이것은 angularjs를 사용하여 서비스 파일을 만들고 컨트롤러에 서비스를 추가하는 데모입니다.

내 데모에 두 가지 문제가 있습니다.

  • 하나는 이 오류가 발생 <script src="HomeController.js">하기 전에 넣을 때입니다 <script src="MyService.js">.

오류 : [ng : areq] 인수 'HomeController'는 함수가 아니므로 정의되지 않았습니다.

  • 다른 하나는 다음 오류가 발생 <script src="MyService.js">하기 전에 넣을 때입니다 <script src="HomeController.js">.

오류 : [$ injector : unpr] 알 수없는 공급자 : MyServiceProvider <-MyService

내 출처 :

파일 Index.html:

<!DOCTYPE html>
<html >
    <head lang="en">…</head>
    <body ng-app="myApp">
        
        <div ng-controller="HomeController">
            <div ng-repeat="item in hello">{{item.id + item.name}}</div>
        </div>

        <script src="Scripts/angular.js"></script>
        <script src="Scripts/angular-route.js"></script>

        <!-- App libs -->
        <script src="app/app.js"></script>    
        <script src="app/services/MyService.js"></script>
        <script src="app/controllers/HomeController.js"></script>
    </body>
</html>

파일 HomeController.js:

(function(angular){
    'use strict';

    var myApp = angular.module('myApp',[]);

    myApp.controller('HomeController',function($scope,MyService){    
        $scope.hello=[];
        $scope.hello = MyService.getHello();
    });
})(window.angular);

파일 MyService.js:

(function(angular){
    'use strict';

    var myApp = angular.module('myApp',[]);

    myApp.service('MyService', function () {
        var hello =[  {id:1,name:'cuong'},
            {id:2,name:'nguyen'}];
        this.getHello = function(){
            return hello;
        };
    });

})(window.angular);

1
* .controller.js를 추가했는지 여부를 BundleConfig.cs 파일에 추가했는지 확인하십시오. 이것은 내 것을 고칩니다.
Syed Mohamed

답변:


210

그러면 새 모듈 / 앱이 생성됩니다.

var myApp = angular.module('myApp',[]);

이미 생성 된 모듈에 액세스하는 동안 ( 두 번째 인수가 생략 된 것에주의하십시오 ) :

var myApp = angular.module('myApp');

두 스크립트 모두에서 첫 번째 접근 방식을 사용하므로 기본적으로 이전에 만든 모듈을 재정의합니다.

로드되는 두 번째 스크립트에서 var myApp = angular.module('myApp');.


이것은 내 오류도 수정했습니다. 실수로 angular.module ( 'myApp', [ 'ui.router'])을 두 개의 다른 파일 (app.js 및 routes.js)에 남겨 두었습니다. route.js에서 배열을 제거하면 단위 테스트가 수정되었습니다.
Allan Bogh 2016-06-15

64

이 오류가 한 번 발생했습니다. 내 문제는 FILE_NAME_WHERE_IS_MY_FUNCTION.js를 추가하지 않았다는 것입니다.

그래서 내 file.html 은 내 기능이 어디에 있는지 찾지 못했습니다.

"file.js"를 추가하면 문제가 해결되었습니다.

<html ng-app='myApp'>
    <body ng-controller='TextController'>
    ....
    ....
    ....
    <script src="../file.js"></script>
    </body>
</html>

1
큰 시간을 보냈습니다. Yeoman은 앵귤러 생성기의 index.html 하단에 스크립트 태그를 집어 넣습니다. 놓치기 쉽습니다. 감사합니다!
JaeGeeTee

같은 문제를 실행했습니다. 다른 컨트롤러와 함께 내 인덱스 페이지에서 해당 controller.js 파일을 추가했다
ahmednawazbutt

21

또한 컨트롤러가 body의 닫는 태그 바로 앞의 index.html 하단에있는 스크립트 태그 내에 정의되어 있는지 확인하십시오.

 <!-- build:js({.tmp,app}) scripts/scripts.js -->
    <script src="scripts/app.js"></script>
    <script src="scripts/controllers/main.js"></script>
    <script src="scripts/controllers/Administration.js"></script>
    <script src="scripts/controllers/Leaderboard.js"></script>
    <script src="scripts/controllers/Login.js"></script>
    <script src="scripts/controllers/registration.js"></script>

specific.html, specific.js 및 app.js 페이지에서 모든 철자가 "올바르게"(동일하게) 표기되어 있으면 문제가 해결됩니다.


10

주사 목록과 기능 사이에 ","를 놓칠 때마다 몇 번이나 발생했습니다.

app.controller('commonCtrl', ['$scope', '$filter',function($scope,$filter) {

}]);

컨트롤러 이름과 주입 목록 사이에 ","가 누락 된 경우에도 똑같은 일이 발생했습니다. 즉app.controller('commonCtrl' ['$scope', '$filter',function($scope,$filter) { }]);
Benji

5

이 오류도 발생했지만 제 경우에는 컨트롤러 명명 규칙 때문이었습니다. 나는 선언 controller: "QuestionController".state있지만 컨트롤러 정의에 나는 그것을 좋아 선언

yiiExamApp.controller('questionController' ...

그러나 그것은

yiiExamApp.controller('QuestionController' ...

이 어리석은 실수로 인해이 오류에 직면 한 사람들에게 도움이되기를 바랍니다. 나는 그것을 식별하는 데 4 시간을 낭비했습니다.


5

같은 오류가 발생했습니다. 나는 이와 같은 자바 스크립트를 정의했다.

<script src="controllers/home.js" />

그런 다음 이것으로 변경

<script src="controllers/home.js"></script>

이 후 내 문제가 해결되었습니다.


4

나는 또한이 동일한 오류가 발생했으며 나를위한 수정 사항은 기본 모듈 배열에 자식 모듈을 포함시키는 것이 었습니다.

var myApp = angular.module('myApp', ['ngRoute', 'childModuleName']);

4

다른 모든 것이 실패하고 나처럼 MEAN 스택에서 로컬로 달리는 경우 ... 그냥 멈추고 다시 봉사하십시오! 나는 단순히 꿀꺽 꿀꺽 서브를 다시 실행할 때까지 모든 게시물에서 아무 소용이 없는지에 이르기까지 모든 것을 꼼꼼하게 확인하고 있었다.


이것은 grunt 서브에서도 발생합니다
acromm

2

비슷한 문제가있었습니다. 수정은 본문에 대한 닫는 태그 바로 앞의 index.html 하단에있는 스크립트 태그 내에서 ctroller가 정의 될뿐만 아니라 폴더가 구조화 된 순서대로 있는지 확인하는 것입니다.

<script src="scripts/app.js"></script>
<script src="scripts/controllers/main.js"></script>
<script src="scripts/controllers/Administration.js"></script>
<script src="scripts/controllers/Leaderboard.js"></script>
<script src="scripts/controllers/Login.js"></script>
<script src="scripts/controllers/registration.js"></script>

2

내 프로젝트에서도이 문제가 발생했습니다. 결국 my-controller.jskarma.conf.js파일에 삽입 한 후 작동했습니다 .<script>태그 .

이것이 도움이되기를 바랍니다. 이 문제로 이어질 수있는 많은 이유가 있습니다.


1

이 오류도 발생했습니다.

라우팅 정보에 새 컨트롤러를 추가해야했습니다. \ src \ js \ app.js

angular.module('Lillan', [
  'ngRoute',
  'mobile-angular-ui',
  'Lillan.controllers.Main'
])

컨트롤러를 추가하여

angular.module('Lillan', [
  'ngRoute',
  'mobile-angular-ui',
  'Lillan.controllers.Main',
  'Lillan.controllers.Growth'
])

건배!


1

분명히 이전 게시물이 유용하지만 위의 게시물 중 어느 것도 제 경우에는 도움이되지 않습니다. 그 이유는 스크립트로드 순서가 잘못 되었기 때문 입니다. 예를 들어, 필자의 경우 컨트롤러 editCtrl.js는 ui-bootstrap-tpls.js에 의존하므로 먼저로드해야합니다. 이로 인해 오류가 발생했습니다.

<script src="scripts/app/station/editCtrl.js"></script>
<script src="scripts/angular-ui/ui-bootstrap-tpls.js"></script>

이것이 맞습니다.

<script src="scripts/angular-ui/ui-bootstrap-tpls.js"></script>
<script src="scripts/app/station/editCtrl.js"></script>

따라서 오류를 수정하려면 먼저 종속성없이 모든 스크립트를 선언 한 다음 이전에 선언 한 스크립트에 종속 된 스크립트를 선언해야합니다.


1

이 시도

    <title>My First Angular App</title>

</head>

<body>

     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

    <h3>Adding Simple Controller<h3>        

    <div ng-controller="SimpleController">
        Name:

        <br/>

        <input type = "text" data-ng-model = "name"/> {{name}}

        <br/>

        <ul>    
            <li data-ng-repeat = "cust in customers | filter:name | orderBy:'city'">
                {{cust.name}} - {{cust.city}}
            </li>
        </ul>

    </div>


    <script>

        var angularApp = angular.module('angularApp',[]);

        angularApp.controller('SimpleController', [ '$scope', SimpleController]);

        function SimpleController($scope)
        {

            $scope.customers = [
                                    {name:'Nikhil Mahirrao', city:'Pune'},
                                    {name:'Kapil Mahire', city:'Pune'},
                                    {name:'Narendra Mahirrao', city:'Phophare'},
                                    {name:'Mithun More', city:'Shahada'}

                                ]; 
        }

    </script>

</body>


1

제 경우에는 html 파일에 Angular 응용 프로그램의 이름이 누락되었습니다. 예를 들어,이 파일을 내 애플리케이션 코드의 시작으로 포함했습니다. 나는 그것이 실행되고 있다고 생각했지만 그렇지 않았습니다.

app.module.js

(function () {
    'use strict';

    angular
        .module('app', [
        // Other dependencies here...
        ])
    ;

})();

그러나 html에서 앱을 선언했을 때 다음과 같이했습니다.

index.html

<html lang="en" ng-app>

그러나 내가 사용한 이름으로 Angular 응용 프로그램을 참조하려면 다음을 사용해야합니다.

index.html (고정)

<html lang="en" ng-app="app">

1

앱에서 해당 모듈을 정의한 스크립트 앞에 컨트롤러 스크립트를 추가했기 때문에 오류가 발생했습니다. 먼저 스크립트를 추가하십시오.

<script src = "(path of module.js file)"></script>

그런 다음 추가

<script src = "(path of controller.js file)"></script>

기본 파일에서.


1

오류 : ng : areq 잘못된 인수 는 대괄호를 너무 빨리 닫았 기 때문에 몇 번이나 받았습니다 . 아래의 BAD 예제에서는 실제로 마지막 괄호 앞에 있어야 할 때 '$ state'뒤에 잘못 닫힙니다.

나쁜:

sampleApp.controller('sampleApp', ['$scope', '$state'], function($scope, $state){

});

좋은:

sampleApp.controller('sampleApp', ['$scope', '$state', function($scope, $state){

}]);

0

예. 많은 사람들이 이전에 지적했듯이 index.html의 모든 컨트롤러 파일에 src 경로를 추가했습니다.

<script src="controllers/home.js"></script>
<script src="controllers/detail.js"></script>
<script src="controllers/login.js"></script>
<script src="controllers/navbar.js"></script>
<script src="controllers/signup.js"></script>

이 오류가 수정되었습니다.


0

같은 문제가 있었지만 파일을 grunt / gulp 최소화 프로세스에 포함하는 것을 잊었습니다.

grunt.initConfig({
  uglify: {
    my_target: {
      files: {
        'dest/output.min.js': ['src/input1.js', 'src/missing_controller.js']
      }
    }
  }
});

도움이 되었기를 바랍니다.


0

내 상황에서이 오류는 배열 인수 내에서 함수를 선언하지 않았을 때 나타납니다.

와 한 오류 :

taskAppControllers.controller('MainMenuCtrl', []);

고정 된 것 :

taskAppControllers.controller('MainMenuCtrl', [function(){

}]);

0

또한 맞춤법 오류 도 확인하십시오 .

var MyApp = angular.module('AppName',[]);
MyApp.controller('WRONG_SPELLING_MyCtrl', ['$scope', MyControllerCtrl])
function MyControllerCtrl($scope) {
   var vm = $scope;
   vm.Apple = 'Android';
}

<div ng-controller="ACTUAL_SPELLING_MyCtrl">
    {{Apple}}
</div>

0

HTML 페이지에 다음이 포함되어 있는지 확인하십시오.

  1. angular.min 스크립트
  2. app.js
  3. 컨트롤러 JavaScript 페이지

파일이 포함 된 순서가 중요합니다. 이 문제에 대한 나의 해결책이었습니다.

도움이 되었기를 바랍니다.


0
sampleApp.controller('sampleApp', ['$scope', '$state', function($scope, $state){

나에게도 쉼표 ','함수가 문제를 해결하는 데 도움이되기 전에-Error : ng : areq Bad Argument


0

내 컨트롤러 파일이 비어있는 것으로 캐시되었습니다. 캐시를 지우면 문제가 해결되었습니다.


0

실수로 HomeController.js 를 예상했던 곳에서 직접 옮겼습니다. 원래 위치에 다시 놓습니다.

그 후 내 웹 사이트가 매초 자동으로 페이지를로드하기 시작했지만 오류를 볼 수도 없었습니다. 그래서 브라우저 캐시를 지 웠습니다. 문제를 해결했습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.