আমি কীভাবে অ্যাঙ্গুলারজেএসকে "রিফ্রেশ" করতে পারি?


168

আমার একটি ক্লিক ইভেন্ট রয়েছে যা আমার কাস্টম নির্দেশের ক্ষেত্রের বাইরে ঘটে, সুতরাং "এনজি-ক্লিক" বৈশিষ্ট্যটি ব্যবহার না করে আমি একটি jQuery.click () শ্রোতার ব্যবহার করছি এবং আমার স্কোপের ভিতরে কোনও ফাংশনকে এভাবে কল করছি:

$('html').click(function(e) {
  scope.close();
);

ক্লোজ () হ'ল একটি সাধারণ ফাংশন যা দেখে মনে হয়:

scope.close = function() {
  scope.isOpen = false;
}

আমার দৃষ্টিতে, আমার কাছে "এনজি-শো" এর সাথে একটি উপাদান রয়েছে ওপেনের সাথে আবদ্ধ:

<div ng-show="isOpen">My Div</div>

ডিবাগ করার সময়, আমি দেখতে পাচ্ছি যে কাছাকাছি () ডাকা হচ্ছে, আইসওপেনটি মিথ্যাতে আপডেট করা হচ্ছে, তবে অ্যাঙ্গুলারজেএস ভিউ আপডেট হচ্ছে না। ভিউটি আপডেট করার জন্য আমি ম্যানুয়ালি অ্যাঙ্গুলারকে বলতে পারি এমন কোনও উপায় আছে? বা আমি যে সমস্যাটি দেখছি না তার সমাধান করার জন্য আরও একটি "কৌণিক" দৃষ্টিভঙ্গি রয়েছে?

উত্তর:


315

সমাধান কল ছিল ...

$scope.$apply();

... আমার jQuery ইভেন্ট কলব্যাক।


9
আমার মনে হয় এই লিঙ্কটি সহায়ক হবে। jimhoskins.com/2012/12/17/angularjs-and-apply.html
রোমান স্ক্লায়ারভ

6
তা হওয়া উচিত নয় $scope.$apply();?
এরিচবিএসচুল্জ

আপনি সুযোগ বা সুযোগ উভয়ই ব্যবহার করতে পারেন, এটি কেবল একটি স্বীকৃতি পার্থক্য তবে এটির ফলাফল একই in
ব্যবহারকারী 1226868

4
@ এরিচবিএসচুল্জ-নির্দেশনার পরে, আমি দেখতে পাচ্ছি না scope যা আমি বিশ্বাস করি যে এটির এবং '$ স্কোপ'-এর মধ্যে পার্থক্যের সম্ভাবনা রয়েছে যা নিয়ামকদের মধ্যে ইনজেকশনে পরিণত হয়। কন্ট্রোলারগুলিতে, স্কোপ দ্বারা রেফারেন্স করা জরুরী সুতরাং কৌনিক কীভাবে ইনজেকশনের নির্ভরতা জানে, যখন কোনও নির্দেশিকা লিঙ্ক ফাংশনে এটি সর্বদা একই 4 উপাদানকে অর্ডিনাল দ্বারা পাস করে এবং নির্দিষ্ট নাম (স্কোপ, উপাদান, অ্যাটর্স, নিয়ামক) প্রয়োজন হয় না does )।
চেম্বারলাইন

30

কেন $applyডাকা হবে?

টিএল; ডিআর : $applyআপনি যখনই কৌণিক বিশ্বের বাইরে করা পরিবর্তনগুলি প্রয়োগ করতে চান কল করা উচিত ।


@ ডাস্টিনের উত্তরটি আপডেট করার জন্য , এখানে ঠিক কী প্রয়োগ হয় এবং এটি কেন কাজ করে তার একটি ব্যাখ্যা এখানে রয়েছে ।

$apply()AngularJS ফ্রেমওয়ার্কের বাইরে থেকে AngularJS তে একটি এক্সপ্রেশন চালানোতে ব্যবহৃত হয়। (উদাহরণস্বরূপ ব্রাউজার ডিওএম ইভেন্টগুলি থেকে সেটটাইমআউট, এক্সএইচআর বা তৃতীয় পক্ষের লাইব্রেরি)। যেহেতু আমরা AngularJS কাঠামোর মধ্যে আহ্বান করা হয় আমরা সঠিক সুযোগ জীবনচক্র সঞ্চালন প্রয়োজন ব্যতিক্রম হ্যান্ডলিং , ঘড়ির নির্বাহ

কৌণিক কোনও মানকে বাধ্যতামূলক লক্ষ্য হিসাবে ব্যবহারের অনুমতি দেয়। তারপরে কোনও জাভাস্ক্রিপ্ট কোড টার্ন শেষে এটি পরীক্ষা করে মানটি পরিবর্তন হয়েছে কিনা। সেই ধাপ যা কোনও বাঁধাইয়ের মান পরিবর্তিত হয়েছে কিনা তা যাচাই করে কিনা বাস্তবে একটি পদ্ধতি রয়েছে, $scope.$digest()1 । আমরা প্রায়শই একে সরাসরি কল করি না, আমরা $scope.$apply()পরিবর্তে ব্যবহার করি (যা কল করবে $scope.$digest)।

কৌণিক শুধুমাত্র $watchস্কোপের অভ্যন্তরে কোনও জীবিতের ভাবের বহির্ভুত এবং কিছুতে ব্যবহৃত ভেরিয়েবলগুলি পর্যবেক্ষণ করে। সুতরাং আপনি যদি কৌণিক প্রসঙ্গে বাইরের মডেলটি পরিবর্তন করছেন, আপনাকে $scope.$apply()সেই পরিবর্তনগুলি প্রচার করার জন্য কল করতে হবে, অন্যথায় কৌণিক জানেন না যে সেগুলি পরিবর্তিত হয়েছে এভাবে বাধ্যতামূলক আপডেট করা হবে না 2


14

ব্যবহার

$route.reload();

$routeআপনার নিয়ামক ইনজেকশন মনে রাখবেন ।


5
এছাড়াও, ইউআই-রাউটার ব্যবহার করার সময় অবশ্যই তা নিশ্চিত করুন$state.reload()
জেফ্রি রুজেন্ডাল

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