त्रुटि: तर्क एक कार्य नहीं है, अपरिभाषित हो गया


120

Scala Play के साथ AngularJS का उपयोग करते हुए, मुझे यह त्रुटि मिल रही है।

त्रुटि: तर्क 'MainCtrl' एक फ़ंक्शन नहीं है, अपरिभाषित हो गया

मैं सप्ताह के दिनों से मिलकर एक टेबल बनाने की कोशिश कर रहा हूं।

कृपया मेरे कोड पर एक नज़र डालें। मैंने कंट्रोलर का नाम चेक किया था, लेकिन यह सही है। नोट: इस SO उत्तर से प्रयुक्त कोड

index.scala.html

@(message: String)

@main("inTime") {

<!doctype html>
<html lang="en" ng-app>
    <head>
        <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
    </head>
<div ng-controller="MainCtrl">
    <table border="1">
    <tbody ng-repeat='(what,items) in data'>
      <tr ng-repeat='item in items'>
        <td ngm-if="$first" rowspan="{{items.length}}">{{what}}</td>
        <td>{{item}}</td>
      </tr>
    </tbody>
  </table>
</div>
</html> 
}

MainCtrl.js

(function() {
    angular.module('[myApp]', []).controller('MainCtrl', function($scope) {
        $scope.data = {
            Colors: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
        }
    });
}());

15
Html में, जहाँ आपने उपयोग किया है, ng-appआप इसे बदल सकते हैंng-app=myApp
Chandermani

वही त्रुटि @Chandermani
केविन मेरेडिथ

क्या आपने कोड से क्लोजर (IIFE) हटाने की कोशिश की है? जब मुझे यह समस्या थी, तो ऐसा इसलिए था क्योंकि मेरी जावास्क्रिप्ट में PHP त्रुटि थी।
केविन बील

1
आप अपनी समस्या का पता लगा सकते हैं, इस चेकलिस्ट द्वारा
सर्गेई पानिलिलोव

पुष्टि करें कि क्या आपने MainCtrl.controller.js जोड़ा है बंडल बंडल में जोड़ा गया है। फाइल
सैयद मोहम्मद

जवाबों:


107

[]मॉड्यूल के नाम ([myApp]) से निकालें

angular.module('myApp', [])

और ng-app="myApp"html में जोड़ें और यह काम करना चाहिए।


1
यह काम करने के लिए मुझे बस इतना करना था कि दूसरा सुझाव था (यानी सेट एनजी-ऐप = "myApp")। अगर मैंने [] को हटा दिया, तो मुझे एक और त्रुटि मिली।
जेसन

15
दूसरा पैरामीटर होने से []संकेत मिलता है कि आप एक नया मॉड्यूल बना रहे हैं। दूसरा पैरामीटर निकालना यह दर्शाता है कि आप किसी मौजूदा मॉड्यूल को पुनः प्राप्त कर रहे हैं। इसलिए जांच करने की एक संभावना यह है कि क्या आप angular.moduleदो बार कॉल कर रहे हैं , दोनों बार दूसरे पैरामीटर सहित। यदि ऐसा है, तो बाद में होने वाली घटना उस बिंदु तक नियंत्रकों की किसी भी परिभाषा को छिपाते हुए, दूसरी को अधिलेखित कर देगी।
कार्ल जी।

26
जब वह हटाने के लिए कहता है कि []वह पहले पैरामीटर का उल्लेख कर रहा है, जहां ओपी के [myApp]बजाय है myApp। वह दूसरे पैरामीटर के बारे में बात नहीं कर रहा है।
केविन बील

1
यदि आप मार्गों का उपयोग कर रहे हैं तो अपने नियंत्रक का नाम जांचें। मार्ग परिभाषा में नियंत्रक नाम केस संवेदी है।
लातिनी योद्धा

78

प्रथम। जाँच करें कि क्या आपके पास controllerमार्ग परिभाषाओं में सही है, नियंत्रक नाम के समान जो आप परिभाषित कर रहे हैं

communityMod.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/members', {
        templateUrl: 'modules/community/views/members.html',
        controller: 'CommunityMembersCtrl'
      }).
      otherwise({
        redirectTo: '/members'
      });
  }]);

communityMod.controller('CommunityMembersCtrl', ['$scope',
    function ($scope) {
        $scope.name = 'Hello community';
    }]);

इस उदाहरण में विभिन्न नियंत्रक नाम त्रुटियों को जन्म देंगे, लेकिन यह उदाहरण सही है

दूसरा जाँच अगर आप अपने जावास्क्रिप्ट फ़ाइल आयात किया है:

<script src="modules/community/controllers/CommunityMembersCtrl.js"></script>


30
मेरे अनुभव में, आपकी "दूसरी" हमेशा समस्या है। मैं अक्सर में मेरी नियंत्रक आयात करने के लिए भूल जाते हैंindex.html
msanford

यह मेरे मामले में दूसरा भी था, जेएस फ़ाइल आयात करना भूल गया ...
सौरभ मिश्रा

26

मेरे पास एक ही त्रुटि संदेश था (मेरे मामले में: "तर्क 'languageSelectorCtrl' एक फ़ंक्शन नहीं है, अपरिभाषित हो गया")।

कोणीय बीज के कोड के साथ कुछ थकाऊ तुलना के बाद, मुझे पता चला कि मैंने पहले app.s.s. में नियंत्रक मॉड्यूल का संदर्भ हटा दिया था। (इसे https://github.com/angular/angular-seed/blob/master/app/js/j.s पर देखें )

इसलिए मेरे पास यह था:

angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.directives'])

यह विफल रहा।

और जब मैंने लापता संदर्भ जोड़ा:

angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.controllers', 'MyApp.directives'])

त्रुटि संदेश गायब हो गया और कोणीय फिर से नियंत्रकों को प्रेरित कर सकता है।


एक ही समस्या थी, मेरा मुद्दा यह था कि मैं अपने नियंत्रक को ऐप मॉड्यूल में जोड़ना भूल गया ... ऐसा स्वचालित रूप से क्यों नहीं होता है ??? किसी भी तरह धन्यवाद!
TheZuck

16

कुछ समय में यह त्रुटि html में निर्दिष्ट दो ng-app निर्देशों का परिणाम है । गलती से मेरे मामले ng-appमें मैंने अपने htmlटैग में और इस तरह टैग ng-app="myApp"में निर्दिष्ट किया था body:

<html ng-app>
  <body ng-app="myApp"></body>
</html>

1
यह मेरे साथ तब हुआ जब मैंने इंजेक्शन को myApp मॉड्यूल में नहीं जोड़ा।
गन्धिकीस २०'१६

धन्यवाद! इससे मेरा मुद्दा ठीक हो गया।
bradden_gross

6

इसने मुझे गंभीरता से 4 घंटे (एसओ पर अंतहीन खोजों सहित) ले लिया, लेकिन आखिरकार मैंने इसे पाया: गलती से (अनजाने में) मैंने कहीं एक जगह जोड़ दी।

क्या आप इसे देख सकते हैं?

angular.module('bwshopper.signup').controller('SignupCtrl ', SignupCtrl);

तो ... 4 घंटे बाद मैंने देखा कि यह होना चाहिए:

angular.module('bwshopper.signup').controller('SignupCtrl', SignupCtrl);

सिर्फ नग्न आंखों से देखना लगभग असंभव है।

यह पुनरीक्षण नियंत्रण (गिट या जो कुछ भी) और इकाई / प्रतिगमन परीक्षण के महत्वपूर्ण महत्व पर बल देता है।


1
मेरा जवाब एक अतिरिक्त स्थान नहीं था, लेकिन इसने मुझे मेरे तय करने के लिए प्रेरित किया। मेरे पास Controllerइसके बजाय था controllerऔर यह सब था।
ग्रैंडर

और मैंने अपनी फ़ाइल का नाम विकल्प- moda.controller.js रखा, लेकिन विकल्प-modal.controller.js DOH की तलाश में था!
theFish

मेरा कारण था कि मैं बंडल .onfig में .js जोड़ना भूल गया था। सरल लेकिन निराशाजनक।
एगे बेराक

4

मैंने उसी समस्या का सामना किया है और मेरे मामले में यह इस समस्या के परिणामस्वरूप हो रहा है:

मेरे पास एक अलग मॉड्यूल (जिसे 'myApp.controllers' कहा जाता है) और मुख्य ऐप मॉड्यूल (जिसे 'myApp' कहा जाता है) में इंजेक्ट किया गया है:

angular.module('myApp', ['myApp.controllers'])

एक सहकर्मी ने एक अन्य नियंत्रक मॉड्यूल को एक अलग फ़ाइल में धकेल दिया लेकिन ठीक उसी नाम के साथ मेरा (यानी 'myApp.controllers') जिसने इस त्रुटि का कारण बना। मुझे लगता है क्योंकि कोणीय उन नियंत्रक मॉड्यूल के बीच भ्रमित हो गया। हालाँकि जो गलत हो रहा है उसे खोजने में त्रुटि संदेश बहुत मददगार नहीं था।


1
मॉड्यूल में दूसरे पैरामीटर को हटाकर इसे ठीक किया जाना चाहिए ... दूसरे पैरामीटर के बिना कोणीय.module ('myApp') का उपयोग करके मौजूदा मॉड्यूल प्राप्त करना। अर्थात कोणीय। सूत्र ('myApp')। कॉनोलर (...)
संतोष

3

मेरे मामले में (एक अवलोकन पृष्ठ और एक "ऐड" पृष्ठ होने के नाते) मुझे यह नीचे की तरह मेरे रूटिंग सेटअप के साथ मिला। यह AddCtrl के लिए संदेश दे रहा था जिसे इंजेक्ट नहीं किया जा सकता ...

$routeProvider.
  when('/', {
    redirectTo: '/overview'
  }).      
  when('/overview', {
    templateUrl: 'partials/overview.html',
    controller: 'OverviewCtrl'
  }).
  when('/add', {
    templateUrl: 'partials/add.html',
    controller: 'AddCtrl'
  }).
  otherwise({
    redirectTo: '/overview'
  });

जिस वजह से when('/'मार्ग के मेरे सभी मार्ग ओवरव्यू में चले गए और कंट्रोलर को रूट पेज जोड़ने / जोड़ने पर मिलान नहीं किया जा सका। यह भ्रामक था क्योंकि मैंने ऐडवर्ड्स टेम्पलेट को देखा था, लेकिन इसका नियंत्रक कहीं नहीं था।

जब मेरे लिए यह समस्या ठीक हो गई है तो '/' - मार्ग को हटाना।


मैं इस त्रुटि को भी प्राप्त कर रहा था और अपने बालों को फाड़ रहा था क्योंकि यह मेरे TFS के विफल होने का कारण बन रहा था। '' / 'रूट को कमेंट करके मेरे लिए भी तय किया। अब यह पता लगाने के लिए क्यों!
फिलिप कोपले

3

यदि आप एक सबमॉड्यूल में हैं, तो मुख्य ऐप में मॉड्यूल की घोषणा करना न भूलें। अर्थात :

<scrip>
angular.module('mainApp', ['subModule1', 'subModule2']);

angular.module('subModule1')
   .controller('MyController', ['$scope', function($scope) {
      $scope.moduleName = 'subModule1';
   }]);
</script>
...
<div ng-app="mainApp">
   <div ng-controller="MyController">
   <span ng-bind="moduleName"></span>
</div>

यदि आप mainApp में subModule1 घोषित नहीं करते हैं, तो आपको "[ng: areq] तर्क" माइकंट्रोलर "एक फ़ंक्शन नहीं है, अपरिभाषित हो गया।


2

कॉम्समेड का दूसरा बिंदु मेरा नुकसान था लेकिन सिर्फ रिकॉर्ड के लिए, शायद यह कहीं किसी की मदद कर रहा है:

मेरे पास एक ही समस्या थी और इससे पहले कि मैं पागल हो जाता मुझे पता चला कि मैं अपने नियंत्रक स्क्रिप्ट को शामिल करना भूल गया था।

जैसा कि मेरा ऐप ASP.Net MVC पर आधारित है, मैंने अपने App_Start / बंडल में निम्नलिखित स्निपेट को सम्मिलित करके अपने आप को समझदार रखने का निर्णय लिया।

bundles.Add(new ScriptBundle("~/app").Include(
                "~/app/app.js",
                "~/app/controllers/*.js",
                "~/app/services/*.js" ));

और Layout.cshtml में

<head>
...
   @Scripts.Render("~/app")
...
</head>

अब मुझे फ़ाइलों को मैन्युअल रूप से फिर से शामिल करने के बारे में सोचना नहीं पड़ेगा। इस परियोजना को स्थापित करते समय वास्तव में मुझे ऐसा करना चाहिए था ...


1

मुझे LoginController के साथ समझदार त्रुटि मिली, जिसका मैंने मुख्य index.html में उपयोग किया। मुझे हल करने के दो तरीके मिले:

  1. $ controllerProvider.allowGlobals की स्थापना (), मैं कोणीय में उस टिप्पणी पाया परिवर्तन-सूची "यह विकल्प पुराने ऐप्स को माइग्रेट करने के लिए उपयोगी हो सकता है, लेकिन कृपया इसे नए लोगों में उपयोग न करें!" मूल टिप्पणी

    app.config (['$ कंट्रोलरप्रोवाइडर', फंक्शन ($ कंट्रोलरप्रोवाइडर) {$ कंट्रोलरप्रोवाइडर.लॉगलोबल्स ();}]];

  2. पंजीकरण नियंत्रक के गलत संदूक

इससे पहले

LoginController.$inject = ['$rootScope', '$scope', '$location'];

अभी

app.controller('LoginController', ['$rootScope', '$scope', '$location', LoginController]);

'app' app.js से आते हैं

var MyApp = {};
var app = angular.module('MyApp ', ['app.services']);
var services = angular.module('app.services', ['ngResource', 'ngCookies', 'ngAnimate', 'ngRoute']);

1

मुझसे एक बड़ी गलती हुई थी:

appFormid.controller('TreeEditStepControlsCtrl', [$scope, function($scope){

}]);

आप समझ सकते हैं ? मैं पहले $ गुंजाइश के आसपास '' भूल गया, सही वाक्यविन्यास निश्चित रूप से है:

appFormid.controller('TreeEditStepControlsCtrl', ['$scope', function($scope){

}]);

पहली त्रुटि जिसे मैंने तुरंत नहीं देखा था: " $ गुंजाइश परिभाषित नहीं है ", इसके बाद " त्रुटि: [ng: areq] तर्क 'TreeEditStepControlsCtrl' एक फ़ंक्शन नहीं है, अपरिभाषित हो गया "


0

क्या यह आपकी संपत्ति को "" में घेरने जैसा सरल हो सकता है और '' के साथ अंदर पर जो कुछ भी उद्धरण की आवश्यकता है?

<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">

हो जाता है

<link rel="stylesheet" media="screen" href="@routes.Assets.at('stylesheets/main.css')">

यह पार्सिंग के साथ कुछ समस्याएं पैदा कर सकता है


0

इस समस्या को ठीक करने के लिए, मुझे यह पता लगाना था कि मैंने कोणीय मार्गों की घोषणा में नियंत्रक का नाम गलत लिखा है:

.when('/todo',{
            templateUrl: 'partials/todo.html',
            controller: 'TodoCtrl'
        })

0

मेरे मामले में यह एक सरल टाइपो था index.html:

<script src="assets/javascript/controllers/questionssIndexController.js"></script>

यह होना चाहिए था

<script src="assets/javascript/controllers/questionsIndexController.js"></script>

sनियंत्रक नाम में अतिरिक्त के बिना ।


0

यहाँ क्रोम का उपयोग करते हुए, यह ब्राउज़र का कैश है। बस निरीक्षण (तत्व) के तहत "कैश अक्षम करें" की जाँच करें मेरी समस्या हल हो गई।


0

क्योंकि Google में यह पॉप-अप एक उत्तर खोजने की कोशिश कर रहा है: "त्रुटि: तर्क '' एक फ़ंक्शन नहीं है, अपरिभाषित हो गया"।

यह संभव है कि आप एक ही मॉड्यूल को दो बार बनाने की कोशिश कर रहे हों।

AngularJS मॉड्यूल बनाने, पंजीकरण और पुनर्प्राप्त करने के लिए कोणीय.module एक वैश्विक स्थान है।

एक तर्क को पारित करना एक मौजूदा कोणीय को पुनः प्राप्त करता है। मॉड्यूल, जबकि एक से अधिक तर्क पास करने से एक नया कोणीय बनता है

स्रोत: https://docs.angularjs.org/api/ng/function/angular.module#overview

उदाहरण:

angular.module('myApp', []) किसी भी निर्भरता को इंजेक्ट किए बिना एक मॉड्यूल बनाने के लिए उपयोग किया जाता है।

angular.module('myApp') (बिना तर्क के) एक मौजूदा मॉड्यूल प्राप्त करने के लिए उपयोग किया जाता है।


0

प्रतीत होता है कि कई कार्य समाधानों का सुझाव है कि त्रुटि के कई वास्तविक कारण हैं

मेरे मामले में मैं में नियंत्रक घोषित नहीं किया था app/index.html:

<scipt src="src/controllers/controller-name.controller.js"></script>

त्रुटि हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.