javascript - অবজ - বাংলায় জাভাস্ক্রিপ্ট




কন্ট্রোলার একটি ফাংশন নয়, বিশ্বব্যাপী কন্ট্রোলার সংজ্ঞায়িত করার সময়, অনির্ধারিত পেয়েছিলাম (10)

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

ত্রুটি হয়

ত্রুটি: [ng: areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined বিটা.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 = ["[email protected]", "[email protected]"];

            $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;

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


অন্য সব ব্যর্থ হলে এবং আপনি Gulp বা অনুরূপ কিছু ব্যবহার করা হয় ... শুধু এটি পুনরাবৃত্তি!

আমি 30mins চতুর্থাংশ চেক সবকিছু যখন এটি প্রয়োজন প্যান্ট মধ্যে একটি দ্রুতগতির কিক ছিল।


আমি Angular সঙ্গে একটি শিক্ষানবিস এবং আমি কৌনিক মূল উপাদান মধ্যে অ্যাপ্লিকেশন নাম সহ না মৌলিক ভুল করেনি। সুতরাং, থেকে কোড পরিবর্তন

<html data-ng-app> 

থেকে

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

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


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


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

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

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

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


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

উদাহরণ: -

angular.module('app', [])
    .controller('ContactController', ['$scope', function ContactController($scope) {
        $scope.contacts = ["[email protected]", "[email protected]"];

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

        };
    }]);

অথবা

function ContactController($scope) {
    $scope.contacts = ["[email protected]", "[email protected]"];

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

এটি একটি বিরতি পরিবর্তন কিন্তু allowGlobals ব্যবহার করে allowGlobals ব্যবহার বন্ধ করা allowGlobals

উদাহরণ: -

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

এখানে কৌণিক উৎস থেকে মন্তব্য করা হয়েছে: -

  • দেওয়া নাম সঙ্গে একটি নিয়ামক $controllerProvider Provider মাধ্যমে নিবন্ধিত কিনা তা পরীক্ষা করুন
  • বর্তমান সুযোগের স্ট্রিং মূল্যায়নের একটি কনস্ট্রাকটর প্রদান করে কিনা তা পরীক্ষা করুন
  • যদি $ কন্ট্রোলারপ্রভাইডার # অনুমতি দেয় গ্লোবালস, গ্লোবাল window অবজেক্টে window[constructor] চেক করুন (প্রস্তাবিত নয়)
 .....

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

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

  • আপনার কৌণিক রুট উপাদান (যেমনঃ - html ) তে ng-app নির্দেশনায় ng-app নিশ্চিত করা নিশ্চিত করুন। উদাহরণ: - ng-app = "myApp"

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

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


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

উদাহরণ:

পৃষ্ঠা: index.html

   np-app="saleApp"

নিখোঁজ

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

যখন একটি রুট বলা হয় যে কী কন্ট্রোলার এবং সেবার জন্য দেখুন:

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

তাই অপরিহার্য অনির্ধারিত নিয়ামক সমস্যা এমনকি এই নিয়ন্ত্রক ভুল হতে পারে এমনকি কন্ট্রোলার উল্লেখ না!


যখন আমি ঘটনাক্রমে আমার myApp করলাম তখন আমার এই সমস্যা ছিল:

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

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

Redclclare পরে, Controller1 কাজ বন্ধ করে এবং OP ত্রুটি উত্থাপন করে।


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

যেমন ধরুন আপনি আপনার অ্যাপ্লিকেশনের জন্য ngRoute কনফিগার করেছেন

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

রুট ঘোষণা যে ব্লক সাবধানে,

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

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