নিয়ন্ত্রক কোনও ফাংশন নয়, বিশ্বব্যাপী নিয়ন্ত্রকদের সংজ্ঞায়িত করার সময় অপরিবর্তিত হয়ে পড়েছেন


123

আমি Angularjs ব্যবহার করে একটি নমুনা অ্যাপ্লিকেশন লিখছি। আমি ক্রোম ব্রাউজারে নীচে উল্লিখিত একটি ত্রুটি পেয়েছি।

ত্রুটি হয়

ত্রুটি: [এনজি: আরকিউ] http://erferences.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20 সংজ্ঞাযুক্ত

যা হিসাবে রেন্ডার

আর্গুমেন্ট 'কন্টাক্টকন্ট্রোলার' কোনও ফাংশন নয়, অপরিজ্ঞাত হয়ে গেছে

কোড

<!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>

উত্তর:


172

কৌণিক 1.3+ এর সাহায্যে আপনি আর বিশ্বব্যাপী স্কোপ (সুস্পষ্ট নিবন্ধকরণ ব্যতীত) গ্লোবাল নিয়ামক ঘোষণা ব্যবহার করতে পারবেন না। আপনার module.controllerসিনট্যাক্স ব্যবহার করে নিয়ামক নিবন্ধন করতে হবে ।

উদাহরণ: -

angular.module('app', [])
    .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 = "";

        };
    }]);

অথবা

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

    $scope.add = function() {
        $scope.contacts.push($scope.newcontact);
        $scope.newcontact = "";
    };
}
ContactController.$inject = ['$scope'];
angular.module('app', []).controller('ContactController', ContactController);

এটি একটি ব্রেকিং পরিবর্তন তবে এটি ব্যবহার করে গ্লোবালগুলি ব্যবহারের জন্য বন্ধ করা যেতে পারেallowGlobals

উদাহরণ: -

angular.module('app')
    .config(['$controllerProvider', function($controllerProvider) {
        $controllerProvider.allowGlobals();
    }]);

কৌণিক উত্স থেকে মন্তব্য এখানে:

  • প্রদত্ত নামের একটি নিয়ামক মাধ্যমে নিবন্ধিত হয়েছে কিনা তা পরীক্ষা করে দেখুন $controllerProvider
  • বর্তমান স্কোপের স্ট্রিংয়ের মূল্যায়ন করলে কোনও নির্মাণকারীকে ফেরত দেয় কিনা তা পরীক্ষা করে দেখুন check
  • যদি $ কন্ট্রোলারপ্রাইডার # গ্লোবালগুলিকে অনুমতি window[constructor]দেয় তবে গ্লোবাল windowঅবজেক্টে পরীক্ষা করুন (প্রস্তাবিত নয়)
 .....

expression = controllers.hasOwnProperty(constructor)
            ? controllers[constructor]
            : getter(locals.$scope, constructor, true) ||
                (globals ? getter($window, constructor, true) : undefined);

কিছু অতিরিক্ত চেক:

  • ng-appআপনার কৌণিক মূল উপাদান (যেমন: - html) এর উপরেও অ্যাপ্লিকেশনটি নির্দেশে রেখেছেন তা নিশ্চিত করুন । উদাহরণ: - এনজি-অ্যাপ = "মাই অ্যাপ"

  • যদি সবকিছু ঠিকঠাক হয় এবং আপনি এখনও সমস্যাটি পেয়ে যাচ্ছেন তবে স্ক্রিপ্টগুলিতে আপনার সঠিক ফাইল অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করে মনে রাখবেন না।

  • আপনি বিভিন্ন স্থানে একই মডিউলটি দু'বার সংজ্ঞায়িত করেননি যার ফলাফল একই মডিউলে পূর্বে সংজ্ঞায়িত কোনও সত্তার ফলাফল পরিষ্কার হয়ে যায়, উদাহরণস্বরূপ angular.module('app',[]).controller(..এবং আবার অন্য জায়গায় angular.module('app',[]).service(..(অবশ্যই উভয় স্ক্রিপ্টগুলি অন্তর্ভুক্ত রয়েছে) এর উপর পূর্ববর্তী নিবন্ধিত নিয়ন্ত্রণকারী হতে পারে মডিউলটির appদ্বিতীয় বিনোদনের সাথে সাফ করতে হবে।


প্রস্তাবিত হিসাবে এটি চেক কিভাবে? প্রদত্ত নামের একটি নিয়ামক $ কন্ট্রোলার
প্রোভাইডারের

app.register.controller ('TheController', TheController); আমার জন্য কৌশলটি।
মরফ 85

33

আমি এই সমস্যাটি পেয়েছি কারণ আমি একটি কন্ট্রোলার-সংজ্ঞা ফাইলটি একটি বন্ধের সাথে গুটিয়ে রেখেছিলাম:

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

তবে আমি সেই সংজ্ঞা কোডটি কার্যকর করতে এবং জাভাস্ক্রিপ্টকে বলতে চাই যে আমার নিয়ামকটি বিদ্যমান ছিল। অর্থাৎ উপরেরটি হওয়া দরকার:

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

()) শেষে নোট করুন।


1
+1 মজার বিষয় হল, দেখে মনে হচ্ছে ভিজ্যুয়াল স্টুডিও কখনও কখনও স্বয়ংক্রিয়ভাবে অনুরোধটি সরিয়ে দেয়। আমি একটি বিদ্যমান জেএস ফাইলটি এই কোডটি সহ অনুলিপি করেছি; মূলটির অনুরোধ ছিল, অনুলিপি করা ফাইলটি হয়নি file
পেপারগোডজিলা

16

আমি কৌণিকের সাথে প্রথম এবং আমি কৌনিক মূল উপাদানটিতে অ্যাপের নামটি অন্তর্ভুক্ত না করার প্রাথমিক ভুলটি করেছি। সুতরাং, থেকে কোড পরিবর্তন করা

<html data-ng-app> 

প্রতি

<html data-ng-app="myApp"> 

আমার জন্য কাজ। @ পিএসএল, উপরের উত্তরটিতে ইতিমধ্যে এটি কভার করেছে।


8

আমার এই ত্রুটি হয়েছিল কারণ আমি angular.module('myApp', [])এবং এর মধ্যে পার্থক্য বুঝতে পারি নি angular.module('myApp')

এটি 'মাই অ্যাপ' মডিউলটি তৈরি করে এবং 'মাই অ্যাপ' নামের যে কোনও বিদ্যমান মডিউল ওভাররাইট করে:

angular.module('myApp', [])

এটি একটি বিদ্যমান মডিউল 'মাই অ্যাপ' পুনরুদ্ধার করে :

angular.module('myApp')

আমি আমার মডিউলটিকে অন্য একটি ফাইলে ওভাররাইট করে যাচ্ছিলাম, উপরের প্রথম কলটি যা আমার প্রত্যাশা অনুযায়ী পুনরুদ্ধারের পরিবর্তে অন্য মডিউলটি তৈরি করেছিল।

আরও বিশদ এখানে: https://docs.angularjs.org/guide/module


1
আমার ক্ষেত্রে, আমি মডিউলটি যুক্ত করেছি, আমি কন্ট্রোলার যুক্ত করেছি, তবে আমি অ্যাপটির জন্য মডিউলটির তালিকায় মডিউলটি যুক্ত করতে ভুলে গেছি। `কৌণিক.মুডুল (" অ্যাপ ", [এখানে শ্রুতিমধু] ...`
টমাস

3

আমি কেবল কৌনিক 1.3.3 এ স্থানান্তরিত করেছি এবং আমি দেখতে পেয়েছি যে অ্যাপ্লিকেশন ওভাররাইড করার সময় আমার কাছে যদি বিভিন্ন ফাইলে একাধিক কন্ট্রোলার থাকে এবং আমি প্রথম ঘোষিত পাত্রে হারিয়েছি lost

আমি জানি না একটি ভাল অনুশীলন কিনা, তবে সম্ভবত এটি অন্য কোনওটির জন্য সহায়ক হতে পারে।

var app = app;
if(!app) {
    app = angular.module('web', ['ui.bootstrap']);
}
app.controller('SearchCtrl', SearchCtrl);

2

আমি দুর্ঘটনাক্রমে পুনরায় ঘোষিত হওয়ার সময় আমার এই সমস্যা হয়েছিল myApp:

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

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

পুনরায় ঘোষণার পরে, Controller1কাজ করা বন্ধ করে দেয় এবং ওপি ত্রুটি উত্থাপন করে।


2

সত্যিই দুর্দান্ত উপদেশ, একই জিনিস ছাড়া ত্রুটিটি কেবল আপনার মূল পৃষ্ঠায় অন্তর্ভুক্ত থাকা সমালোচনামূলক স্ক্রিপ্টটি হারিয়ে না যেতে পারে

উদাহরণ:

পৃষ্ঠা: সূচক। html

   np-app="saleApp"

নিখোঁজ

<script src="./ordersController.js"></script>

কোন রুটকে কী নিয়ন্ত্রক এবং কী পরিবেশন করতে হবে তা জানানো হয়:

 .when('/orders/:customerId', {
     controller: 'OrdersController',
     templateUrl: 'views/orders.html'
 })

অতএব অপরিবর্তিত নিয়ামক ইস্যু কন্ট্রোলার রেফারেন্স না এমনকি এই দুর্ঘটনাজনিত ভুল ঘটতে পারে!


0

আপনার যখন অনেকগুলি মডিউল যুক্ত একটি বৃহত প্রকল্প রয়েছে তখন এই ত্রুটিটিও ঘটতে পারে। নিশ্চিত হয়ে নিন যে আপনার কৌনিক ফাইলটিতে ব্যবহৃত অ্যাপ্লিকেশন (মডিউল) আপনি নিজের টেম্পলেটটিতে ব্যবহার করেন, উদাহরণস্বরূপ "এই অ্যাপ্লিকেশন "।

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>

0

অন্য সব কিছু যদি ব্যর্থ হয় এবং আপনি গুল্প বা অন্য কিছু ব্যবহার করছেন ... কেবল এটি পুনরায় চালু করুন!

আমি 30 মিনিট চতুর্মুখী সমস্ত কিছু পরীক্ষা করে নষ্ট করেছিলাম যখন প্যান্টগুলির মধ্যে একটি সুইফ কিক দরকার ছিল।


0

আপনি যদি রুটগুলি ব্যবহার করেন (উচ্চ সম্ভাবনা) এবং আপনার কনফিগারেশনের একটি মডিউলে একটি নিয়ন্ত্রণকারীর রেফারেন্স রয়েছে যা নির্ভরতা হিসাবে ঘোষণা করা হয়নি তবে আরম্ভের ব্যর্থতাও ব্যর্থ হতে পারে।

যেমন ধরে নিলে আপনি আপনার অ্যাপ্লিকেশনটির জন্য এনজিআরট কনফিগার করেছেন, যেমন

angular.module('yourModule',['ngRoute'])
.config(function($routeProvider, $httpProvider) { ... });

রুটগুলি যে ব্লকে ঘোষণা করে তাতে সতর্ক থাকুন,

.when('/resourcePath', { 
templateUrl: 'resource.html',
controller: 'secondModuleController' //lives in secondModule
});

secondModule'এনজিরাউট' এর পরে নির্ভরতা হিসাবে ঘোষণা করুন বিষয়টি সমাধান করা উচিত। আমি জানি আমার এই সমস্যা ছিল


0

আমি এই ত্রুটিটি পেয়েছিলাম কারণ আমি কৌনিকটির একটি পুরানো সংস্করণ ব্যবহার করছি যা আমার কোডের সাথে সামঞ্জস্যপূর্ণ নয়।


0

এই ত্রুটিগুলি ঘটেছিল, আমার ক্ষেত্রে, list.find () fuction এ সিনট্যাক্স ত্রুটিগুলির দ্বারা পূর্বে; আইই 11 দ্বারা স্বীকৃত নয় এমন একটি তালিকার 'সন্ধান' পদ্ধতিটি ফিল্টার পদ্ধতি দ্বারা প্রতিস্থাপন করতে হবে, যা আইই ১১ এবং ক্রোম উভয়ের জন্যই কাজ করে। পড়ুন https://github.com/flrs/visavail/issues/19


0

এই ত্রুটিটি, আমার ক্ষেত্রে আইই ১১-তে একটি তালিকার পদ্ধতিতে বাক্য বাক্য গঠনের আগে প্রস্তাবিত https://github.com/flrs/visavail/issues/19 হিসাবে ফিল্টার পদ্ধতি অনুসারে পদ্ধতিটি প্রতিস্থাপন করুন

তারপরে উপরের নিয়ামক সংশোধিত ত্রুটি সমাধান করা হয়নি।


-3

অ্যাঙ্গুলারজেএস ১.৪.৩ সহ একটি পুরানো টিউটোরিয়াল অনুসরণ করার সময় আমি একই ত্রুটি পেয়েছি। এতদূর সহজ সমাধান হ'ল এঙ্গুলার.জেএস উত্স সম্পাদনা করা

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

প্রতি

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

এবং যেমনটি হয় তেমন টিউটোরিয়াল অনুসরণ করুন এবং অবমূল্যায়িত বৈশ্বিক ফাংশনগুলি কেবল নিয়ামক হিসাবে কাজ করে।


এটা খারাপ অভ্যাস। পিএসএলের উত্তরে উল্লিখিত হিসাবে, আপনি এইভাবে করতে পারেন:angular.module('app') .config(['$controllerProvider', function($controllerProvider) { $controllerProvider.allowGlobals(); }]);
gm2008

-1। এটিও নিশ্চিত করার একটি দুর্দান্ত উপায় যে (ক) আপনি আপগ্রেড হওয়ার সাথে সাথেই এটিকে ওভাররাইট করুন যা অযথা (এবং ভুল) উত্পন্ন করবে যে রিপোর্ট করে যে "1.4.3 থেকে 1.4.4 আপগ্রেড করা আমার অ্যাপ্লিকেশনটি ভেঙে দিয়েছে!" এবং / বা (খ) আপনি নিজের অ্যাপ্লিকেশন আপগ্রেড করবেন না কারণ "এটি শক্ত"।
ফিলিপ কোপলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.