এনজি-পরিবর্তন নতুন মান এবং মূল মান পান get


118

আমি একটি ডাউন ডাউন থেকে মান নির্বাচন করতে এনজি-বিকল্পগুলি ব্যবহার করছি। আমি পুরানো মানটিকে নতুন মানের সাথে তুলনা করতে সক্ষম হতে চাই। এনজি-চেঞ্জটি ডাউন টানার নতুন মানটি ধরে নেওয়ার জন্য ভাল কাজ করে তবে আমি কীভাবে নতুন মান এবং মূল মান উভয় পেতে পারি?

<select ng-change="updateValue(user)" ng-model="user.id" ng-options="user.id as user.name for user in users"></select> 

উদাহরণস্বরূপ, ধরা যাক আমি কন্ট্রোলারটিকে লগ করতে চেয়েছিলাম, "আপনার পূর্ববর্তী ব্যবহারকারীর নামটি বিল ছিল, আপনার বর্তমান ব্যবহারকারীর নাম ফিলিপাইপ"।


1
এখানে আমার উত্তর চেক stackoverflow.com/questions/21909163/... ডুপ্লিকেট হতে পারে
bresleveloper

এটি প্রশাসনিকভাবে কীভাবে কাজ করে তা নিশ্চিত নয় তবে কোনওরূপে সদৃশ থেকে প্রাপ্ত উত্তরগুলি এর সাথে একত্রিত করা উচিত। ব্রেসলিওফার হ'ল একটি দুর্দান্ত সমাধান (ডুপ্লিকেট থেকে) তবে টিজিএইচ উত্তরটিও দেখানো উচিত। প্রথমটি ফ্রেমওয়ার্কের কাজের উপর নির্ভর করে, যা ভবিষ্যতে পরিবর্তিত হতে পারে, এবং দ্বিতীয়টি ফ্রেমওয়ার্ক অজোনস্টিক।
ব্যবহারকারী 1821052

উত্তর:


279

একটি কৌণিক {{এক্সপ্রেশন With With এর সাহায্যে আপনি পুরানো ব্যবহারকারী বা ইউজার.আইডি মানটি আক্ষরিক স্ট্রিং হিসাবে এনজি-পরিবর্তন বৈশিষ্ট্যে যুক্ত করতে পারেন:

<select ng-change="updateValue(user, '{{user.id}}')" 
        ng-model="user.id" ng-options="user.id as user.name for user in users">
</select>

এনজিচেঞ্জ-এ, আপডেটভ্যালুর 1 ম টি আর্গুমেন্টটি নতুন ব্যবহারকারীর মান হবে, 2-টি যুক্তি আক্ষরিক হবে যা সিলেক্ট-ট্যাগটি কৌণিক দ্বারা সর্বশেষে আপডেট করা হয়েছিল, পুরানো ইউজারআরআইডি মান সহ।


6
নোট করুন যে userপদ্ধতি পদ্ধতিটি কলটি ng-modelএনজি-অপশনগুলি থেকে নয় এবং এটি হতে পারে (বিভ্রান্তিকর হতে পারে)। আশা করি এই মার্জিত সমাধানটি
কৌনিকের

15
এটি ক্ষতিকারক হিসাবে বিবেচনা করা উচিত। আমি ঠিক তখনই একটি নোংরা বাগটি পেয়েছি যখন ইউজার.আইডিতে একটি বিশেষ অক্ষর রয়েছে (যেমন 'বা /). এটি কারণ অ্যাঙ্গুলার এক্সপ্রেশন পার্সার আপডেটভ্যালু (ব্যবহারকারী,' ব্লা / ব্লাহ ') এর মত প্রকাশ পছন্দ করে না।
এন্টোইন ব্যাঙ্কেল-শেভরেল

2
ফাংশন আপডেটভ্যালুতে, $ স্কোপ.ইউজার.আইডিতে ইতিমধ্যে নতুন নির্বাচিত মান রয়েছে - এতে নতুন মানটির জন্য কোনও প্যারামিটার পাস করার দরকার নেই
মজিক্স

@ লিনিকু ২ ভোডকা, আমি মনে করি এটি কেবল উদ্ধৃতি চিহ্ন ছাড়া কাজ করে যদি সংখ্যাটি সংখ্যাযুক্ত user.idহয় ... এটি user.idস্ট্রিং বা গাইড হলে কাজ করবে না
তমাস

1
সুন্দর :))))
মাকাতুন

16

এছাড়াও আপনি ব্যবহার করতে পারেন

<select ng-change="updateValue(user, oldValue)"     
       ng-init="oldValue=0"
       ng-focus="oldValue=user.id"
       ng-model="user.id" ng-options="user.id as user.name for user in users">
</select>

1
এই উত্তরটি এনজি-রিপিটটি সত্যিই ভাল কাজ করে। আপনি যদি এনজি-ক্লিক সমর্থন করেন তবে এনজি-ফোকাস না থাকলে আপনি এর পরিবর্তে এনজি-ক্লিকও ব্যবহার করতে পারেন।
মেটিকোয়াস

1
ng-init = "oldValue = 0" & ng-ফোকাস = "oldValue = User.id" আমার জন্য কৌশলটি করেছে।
thatzprem

14

আপনি এনজি-চেঞ্জ = কিছু ম্যাথোড ({{user.id}}) এর মতো কিছু ব্যবহার করতে পারেন। আপনার মান {{প্রকাশ} side দিকে রাখার মাধ্যমে এটি এক্সপ্রেশনটিকে মূল্যায়ন করবে এবং আপনাকে বর্তমান মান দেয় (এনজি-পরিবর্তন পদ্ধতি বলার আগে মান)।

<select ng-model="selectedValue" ng-change="change(selectedValue, '{{selectedValue}}')">

13

আপনার নিয়ামকটিতে কেবল একটি বর্তমানের ভ্যালিয়েবল রাখুন যা আপনি প্রতিটি পরিবর্তনের উপর আপডেট করেন। তারপরে আপনি এটি আপডেট করার আগে প্রতিবার নতুন মানের সাথে এটি তুলনা করতে পারেন ''

একটি ঘড়ি ব্যবহার করার ধারণাটিও ভাল, তবে আমি মনে করি একটি সাধারণ পরিবর্তনশীল হ'ল সহজ এবং সর্বাধিক যৌক্তিক সমাধান।


ওয়াচ সামান্য ব্যয়বহুল অপারেশন, আমি ডিবি-ইনফটির উত্তরটি পছন্দ করেছি .. এটি সহজ কাজের সমাধান
প্রমোদ শর্মা

4
সর্বোত্তম উত্তর. আপনি যদি এনজি-পুনরাবৃত্তির ভিতরে থাকেন তবে এনজি-আরএন ব্যবহার করে উপ-স্কোপে একটি পরিবর্তনশীল তৈরি করুন।
রোমেন এফ

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

9

আপনি স্কোপ ওয়াচটি ব্যবহার করতে পারেন:

$scope.$watch('user', function(newValue, oldValue) {
  // access new and old value here
  console.log("Your former user.name was "+oldValue.name+", you're current user name is "+newValue.name+".");
});

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch


6
আমি একটি নিবন্ধ জুড়ে এসেছি যা জানিয়েছে যে এনজি-চেঞ্জের তুলনায় ঘড়িটি অনেক বেশি নোংরা / অদক্ষ। benlesh.com/2013/10/title.html
মেনিয়োস

5
আমার অভিজ্ঞতায় আপনি প্রায়শই কখনই একটি ঘড়ি ব্যবহার করতে চান না
নার্ডনব

2
প্রোগ্রামিং যদি একটি বিষয়গত শিল্প ছিল তবে আপনার কিছু থাকতে পারে। হায়রে - এনজি-চার্জ বা অন্যান্য নির্দেশ ভিত্তিক দৃষ্টিভঙ্গি এড়িয়ে চলতে চাইলে এমন অনেক কারণ রয়েছে যা "কৌণিক" উপায়ের সাথে সম্পর্কিত নয়।
tommybananas

2

পরিবর্তে আপনি একটি ঘড়ি ব্যবহার করতে পারেন, কারণ এটির পুরানো এবং নতুন মান রয়েছে তবে আপনি ডাইজেস্ট চক্রটি যুক্ত করছেন।

আমি কন্ট্রোলারে কেবল একটি দ্বিতীয় ভেরিয়েবল রেখেছি এবং সেট করেছিলাম।


এটি একটি অত্যন্ত তুচ্ছ উদাহরণ, আমি এই দৃষ্টান্তে কোনও একক প্রহরীকে চিন্তিত করে নেওয়ার পক্ষে পাঠযোগ্যতা নেব। আমি মনে করি ক্লান্ত হতে এখনও একটি ভাল জিনিস।
tommybananas

1
দেখুন এবং এনজি-চেঞ্জের আসলে আলাদা আলাদা আচরণ রয়েছে: এনজি-চেঞ্জ কেবলমাত্র ব্যবহারকারী ইভেন্টগুলি সনাক্ত $watchকরে , যেখানে প্রতিবার পরিবর্তনশীল পরিবর্তনগুলি চালু করা হবে। প্রহরীগুলি জটিলতা বাড়ায় এবং কোড তাদের মান পরিবর্তন করে আপডেট চক্র তৈরি করতে প্রবণ হয়।
রাইস ভ্যান ডার ওয়েয়ার্ডেন

আমি @ রাইস ভ্যান ডের ওয়েয়ারডেনের সাথে একমত ... এই নিবন্ধটি বলেছে যে $ ঘড়িটি কিছুটা বিপজ্জনক: benlesh.com/2013/10/title.html
মেনোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.