[Javascript] नियंत्रक एक समारोह नहीं, वैश्विक स्तर पर नियंत्रकों को परिभाषित करते समय अपरिभाषित हो गया



Answers

मुझे यह समस्या मिली क्योंकि मैंने एक बंदरगाह में एक नियंत्रक-परिभाषा फ़ाइल लपेट ली थी:

(function() {
   ...stuff...
});

लेकिन मैं वास्तव में उस परिभाषा कोड को निष्पादित करने के लिए उस बंद होने का आह्वान करना भूल गया था और वास्तव में जावास्क्रिप्ट को बताता हूं कि मेरा नियंत्रक अस्तित्व में था। हां, उपर्युक्त होना चाहिए:

(function() {
   ...stuff...
})();

अंत में () ध्यान दें।

Question

मैं angularjs का उपयोग कर नमूना आवेदन लिख रहा हूँ। मुझे क्रोम ब्राउज़र पर नीचे उल्लिखित त्रुटि मिली है।

त्रुटि है

त्रुटि: [ng: areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined

जो के रूप में प्रस्तुत करता है

तर्क 'ContactController' एक समारोह नहीं है, अपरिभाषित हो गया

कोड

<!DOCTYPE html>
<html ng-app>
<head>
    <script src="../angular.min.js"></script>
    <script type="text/javascript">
        function ContactController($scope) {
            $scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];

            $scope.add = function() {
                $scope.contacts.push($scope.newcontact);
                $scope.newcontact = "";                 
            };
        }    
    </script>    
</head>

<body>    
    <h1>  modules sample </h1>

    <div ng-controller="ContactController">
        Email:<input type="text" ng-model="newcontact">
        <button ng-click="add()">Add</button>

        <h2> Contacts </h2>
        <ul>
            <li ng-repeat="contact in contacts"> {{contact}} </li>
        </ul>    
    </div>
</body> 
</html>



मुझे यह त्रुटि मिल रही थी क्योंकि मैं कोणीय के पुराने संस्करण का उपयोग कर रहा था जो मेरे कोड के साथ संगत नहीं था।




मुझे एक पुराने ट्यूटोरियल का पालन करते समय एक ही त्रुटि मिली (पुरानी नहीं) AngularJS 1.4.3। अब तक का सबसे सरल समाधान angular.js स्रोत को संपादित करना है

function $ControllerProvider() {
  var controllers = {},
      globals = false;

सेवा मेरे

function $ControllerProvider() {
  var controllers = {},
      globals = true;

और बस ट्यूटोरियल का पालन करें, और बहिष्कृत वैश्विक कार्य केवल नियंत्रकों के रूप में काम करते हैं।




यह त्रुटि तब भी हो सकती है जब आपके पास कई मॉड्यूल के साथ एक बड़ी परियोजना हो। सुनिश्चित करें कि आपके द्वारा उपयोग की जाने वाली ऐप (मॉड्यूल) कोणीय फ़ाइल वही है जो आप अपने टेम्पलेट में उपयोग करते हैं, इस उदाहरण में " thisApp "।

app.js

angular
.module('thisApp', [])
    .controller('ContactController', ['$scope', function ContactController($scope) {
        $scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];

        $scope.add = function() {
            $scope.contacts.push($scope.newcontact);
            $scope.newcontact = "";

        };
    }]);

index.html

  <html>
    <body ng-app='thisApp' ng-controller='ContactController>
         ...
        <script type="text/javascript" src="assets/js/angular.js"></script>
        <script src="app.js"></script>
    </body>
    </html>



जब मैंने गलती से myApp तो मुझे यह समस्या थी:

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

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

पुनर्विक्रय के बाद, Controller1 काम करना बंद कर देता है और ओपी त्रुटि उठाता है।




मुझे यह त्रुटि थी क्योंकि मुझे angular.module('myApp', []) और angular.module('myApp') बीच का अंतर नहीं समझा।

यह मॉड्यूल 'myApp' बनाता है और 'myApp' नामक किसी भी मौजूदा मॉड्यूल को ओवरराइट करता है:

angular.module('myApp', [])

यह एक मौजूदा मॉड्यूल 'myApp' पुनर्प्राप्त करता है:

angular.module('myApp')

मैं अपने मॉड्यूल को दूसरी फाइल में ओवरराइट कर रहा था, ऊपर दिए गए पहले कॉल का उपयोग करके जिसने मुझे उम्मीद के अनुसार पुनर्प्राप्त करने के बजाय एक और मॉड्यूल बनाया था।

यहां अधिक जानकारी: https://docs.angularjs.org/guide/module