AngularJS: আমি কীভাবে ম্যানুয়ালি ইনপুটটিকে ler বৈধ কন্ট্রোলারে সেট করতে পারি?


92

টোকেনইনপুট প্লাগইন ব্যবহার করে এবং অ্যাঙ্গুলার জেএস অন্তর্নির্মিত ফর্ম নিয়ন্ত্রণকারী বৈধতা ব্যবহার করে।

এই মুহুর্তে আমি ক্ষেত্রটিতে পাঠ্য রয়েছে কিনা তা যাচাই করার চেষ্টা করছি এবং তারপরে ক্ষেত্রটি বৈধ হিসাবে সেট করে। প্লাগইনটি ব্যবহার করার বিষয়টি হ'ল এটি নিজের নিজস্ব ইনপুট তৈরি করে এবং তারপরে স্টলিংয়ের জন্য একটি উল + লি তৈরি করে।

আমার কাছে নিয়ন্ত্রণ আইনে অ্যাড আইটেম (ফর্মনাম) এবং আমার ধারণাগুলি অ্যাক্সেস রয়েছে, আমার কেবল এটি বৈধ হিসাবে সেট করা দরকার।

মার্কআপ.

<form class="form-horizontal add-inventory-item" name="addItem">
     <input id="capabilities" name="capabilities" token-input data-ng-model="inventoryCapabilitiesAutoComplete" data-on-add="addCapability()" data-on-delete="removeCapability()" required>
     <div class="required" data-ng-show="addItem.capabilities.$error.required" title="Please enter capability."></div>
</form>

জেএস।

$scope.capabilityValidation = function (capability) {
  if (capability.name !== "") {
    addItem.capabilities.$valid = true;
    addItem.capabilities.$error.required = false;
  } else {
    addItem.capabilities.$valid = false;
    addItem.capabilities.$error.required = true;
  }
};

টোকেনইনপুটটিতে বস্তুটিতে কিছু প্রবেশ করা এবং পাস করার সময় আমি সক্ষমতাবিহীনকরণ ফাংশনটি চালাচ্ছি।

সম্পাদনা:

আমার ইনপুটটিতে এনজি-মডেলটি খুঁজে পেয়েছে যা স্টাফ করে এবং স্ব-পরিপূর্ণ ফলাফলগুলি পায়, যার কারণে আমি মডেলের উপর ভিত্তি করে কাজ করার জন্য এনজি-বৈধ হতে পারি না।

$scope.inventoryCapabilitiesAutoComplete = {
  options: {
    tokenLimit: null
  },
  source: urlHelper.getAutoComplete('capability')
};

আমি এই স্ব-অসম্পূর্ণ বাস্তবায়নটি লিখি না, এনজি-মডেল অ্যাটারের কাছে আমার অ্যাক্সেস থাকতে এবং মডেল ফাংশনটিকে অন্য কোথাও সরিয়ে নিয়ে যাওয়ার জন্য এখানে অন্য উপায় আছে?


4
যেহেতু আপনার প্লাগইনটি নিজস্ব ইনপুট তৈরি করছে এবং আপনি নিজের বৈধতা যাচাই করার জন্য একটি ফাংশন লিখেছেন, তাই কেন কেবল নিজের $ স্কোপ সম্পত্তিটি বৈধতার জন্য ব্যবহার করবেন না: <div ... data-ng-show="capabilities_error" ...> অন্য কথায়, আপনি কি কোনও কারণ চান / फॉर्मকন্ট্রোলার ব্যবহারের প্রয়োজন?
রাজকোক

4
যেহেতু আমার অন্যান্য সমস্ত ফর্মগুলি এটি ব্যবহার করছে আমি তার দেওয়া নিয়ন্ত্রণটি রাখতে চাই। প্লাগইন তৈরি ইনপুটটি আসলে আমার মূল ইনপুটটিতে মান নির্ধারণ করে, যা আমার তখন যাচাইয়ের জন্য যাচাই করা দরকার তবে যখন ইনপুটযুক্ত মান থাকে তখন ফর্ম নিয়ন্ত্রণকারীকে আপডেট করে না।
ক্রিস্টোফার মার্শাল

ইনপুটটি বিচ্ছিন্ন করার উদ্দেশ্যে আমি মার্কআপটি সংক্ষিপ্ত করে রেখেছি। আমার একই ফর্মটিতে আরও একগুচ্ছ ইনপুট রয়েছে।
ক্রিস্টোফার মার্শাল

4
ঠিক আছে. আপনি কি চেষ্টা করেছেন addItem.capabilities.$valid = trueএবং / অথবা অ্যাডআইটেম.প্যাবিলিটিগুলি সেট করেছেন? $ ত্রুটি. যথাযথ হিসাবে সত্য বা মিথ্যা হতে প্রয়োজনীয়?
রাজকোক

আমি উভয় চেষ্টা করেছিলাম। আমি আপনাকে দেখানোর জন্য আমার প্রশ্ন আপডেট করব। $ বৈধ এবং $ ত্রুটি.আরঙ্কিত শোগুলি নিয়ন্ত্রণকারীতে আমার ব্রেকপয়েন্টে অপরিজ্ঞাত হিসাবে রয়েছে তবে অ্যাডআইটেম.প্যাবিলিটিগুলির এখনও ডেটা রয়েছে।
ক্রিস্টোফার মার্শাল

উত্তর:


150

আপনি সরাসরি কোনও ফর্মের বৈধতা পরিবর্তন করতে পারবেন না। সমস্ত বংশধর ইনপুট যদি বৈধ হয় তবে ফর্মটি বৈধ, যদি তা না হয় তবে তা হয় না।

আপনার যা করা উচিত তা হ'ল ইনপুট উপাদানটির বৈধতা সেট করা। তাই ভালো;

addItem.capabilities.$setValidity("youAreFat", false);

এখন ইনপুট (এবং তাই ফর্ম) অবৈধ। কোন ত্রুটিটি অবৈধ হওয়ার কারণ তাও আপনি দেখতে পারেন।

addItem.capabilities.errors.youAreFat == true;

4
capabilitiesপরিবর্তনশীল হলে কী হবে ? আমার একটি অ্যারে রয়েছে যাতে ইনপুট নাম রয়েছে এবং আমি অ্যারের ভিতরে লুপ রাখতে এবং সেগুলি একে একে
অবৈধভাবে

4
পরিবর্তনশীল বলতে কী বোঝ? এটি সরাসরি ফর্মের সাথে আবদ্ধ, ফর্মের মানগুলি নয়। এটি ফর্মের nameবৈশিষ্ট্য এবং ইনপুট এর idবৈশিষ্ট্য ব্যবহার করে। এটি ngModel
19-15

11
আমি সমাধান পাওয়া কিন্তু এই আমি কি বোঝানো ছিল:$scope.addItem['myVariableName'].$setValidity("youAreFat", false);
lightalex

এর পরে এটি প্রদর্শিত হবে যে কিছু ইনপুট ক্ষেত্রগুলি পরিবর্তন বা অস্পষ্টতার জন্য আর বৈধ হয় না
লিওনার্দো

4
কৌণিক 1.4.7 এ এবং আমাকে এই কোডটি $ সুযোগের সাথে উপসর্গ করতে হয়েছিল ..$scope.addItem.capabilities.$setValidity("youAreFat", false);
গ্রাহাম টি

61

উপরের উত্তরগুলি আমার সমস্যা সমাধানে সহায়তা করে নি। দীর্ঘ অনুসন্ধানের পরে আমি এই আংশিক সমাধানটিতে ঝাঁপিয়ে পড়েছি ।

আমি ইনপুট ফিল্ডটি ম্যানুয়ালি এনজি-অবৈধ (এনজি-বৈধ সেটকে 'সত্য' এ সেট করতে) সেট করতে এই কোডটি দিয়ে আমার সমস্যার সমাধান করেছি:

$scope.myForm.inputName.$setValidity('required', false);

4
আমি একই জিনিস করেছি এবং এটি গ্রেট কাজ করে। তবে এখন আমার একই ক্ষেত্রটি পুনর্নির্মাণের কিছু সমস্যা আছে। এটি পরিবর্তিত অবস্থায় পরিবর্তিত হয় না, যা অত্যন্ত উদ্বেগজনক। আমি এনজি-মডেল-অপশনগুলি ব্যবহার করি "" {আপডেটঅন: অন 'সাবমিট'} "একটি বোতামে ক্লিক করতে বৈধতা দিতে। এই সম্পর্কে কোন চিন্তা?
অলিভারকে

4
@OliverKK আপনি ডাকা করতে হবে $setValidityসঙ্গে trueদ্বিতীয় প্যারামিটারটি যখনই ইনপুট বৈধ হিসাবে।
বার্নহার্ড হফম্যান

10
রুটস্কোপটি ব্যবহার করার কোনও অর্থ নেই, কেবল সুযোগ থাকা উচিত
রায়ান এম

4
আমি অনুরূপ সমাধানের চেষ্টা করেছি, তবে যে সমস্যাটি আমি পেয়েছি তা হ'ল আমি যদি ফর্মটিতে নিয়ন্ত্রণের মানটি পরিবর্তন করার চেষ্টা করি তবে এটি অবৈধ। আমার ক্ষেত্রে সেই নিয়ন্ত্রণটি অভ্যন্তরীণ নির্বাচনের সাথে নির্দেশনা। যদি আমি আমার নির্দেশের জন্য অবৈধ সেট করি (যা এনজি-ফর্ম হয়), তবে আমি সেই অবৈধ অবস্থানটি সরাতে অক্ষম unable
নাওমি

17

আমি এই পোস্টটি জুড়ে এসেছি ডাব্লু / একই ধরণের সমস্যা। আমার ফিক্সটি ছিল আমার জন্য আমার অবৈধ অবস্থা ধরে রাখতে কোনও লুকানো ক্ষেত্র যুক্ত করা।

<input type="hidden" ng-model="vm.application.isValid" required="" />

আমার ক্ষেত্রে আমার নিকোলযোগ্য বিল ছিল যা একজন ব্যক্তিকে দুটি পৃথক বোতামের একটি বেছে নিতে হয়েছিল। যদি তারা হ্যাঁ উত্তর দেয়, সংগ্রহের সাথে একটি সত্তা যুক্ত করা হবে এবং বোতামের অবস্থার পরিবর্তন হবে। যতক্ষণ না সমস্ত প্রশ্নের উত্তর না পাওয়া যায়, (প্রতিটি জোড়ায় প্রতিটি বোতামের একটিতে ক্লিক রয়েছে) ফর্মটি বৈধ নয়।

vm.hasHighSchool = function (attended) { 
  vm.application.hasHighSchool = attended;
  applicationSvc.addSchool(attended, 1, vm.application);
}
<input type="hidden" ng-model="vm.application.hasHighSchool" required="" />
<div class="row">
  <div class="col-lg-3"><label>Did You Attend High School?</label><label class="required" ng-hide="vm.application.hasHighSchool != undefined">*</label></div>
  <div class="col-lg-2">
    <button value="Yes" title="Yes" ng-click="vm.hasHighSchool(true)" class="btn btn-default" ng-class="{'btn-success': vm.application.hasHighSchool == true}">Yes</button>
    <button value="No" title="No" ng-click="vm.hasHighSchool(false)" class="btn btn-default" ng-class="{'btn-success':  vm.application.hasHighSchool == false}">No</button>
  </div>
</div>

2

এটা খুব সহজ। উদাহরণস্বরূপ: আপনার মধ্যে জেএস নিয়ামক এটি ব্যবহার করুন:

$scope.inputngmodel.$valid = false;

বা

$scope.inputngmodel.$invalid = true;

বা

$scope.formname.inputngmodel.$valid = false;

বা

$scope.formname.inputngmodel.$invalid = true;

সমস্ত বিভিন্ন প্রয়োজনের জন্য আমার জন্য কাজ করে। এটি যদি আপনার সমস্যার সমাধান করে তবে হিট আপ করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.