ডেটা-বাঁধাই ছাড়াই রেন্ডার মান


87

অ্যাঙ্গুলারজেএস-এ, আমি কীভাবে 2-উপায় ডেটা বাঁধাই ছাড়াই একটি মান রেন্ডার করতে পারি? পারফরম্যান্সের কারণে কেউ এটি করতে পারে, বা একটি নির্দিষ্ট সময়ে সময়ে একটি মান সরবরাহ করতে পারে।

নিম্নলিখিত উদাহরণ উভয় ডেটা বাঁধাই ব্যবহার করে:

<div>{{value}}</div>

<div data-ng-bind="value"></div>

আমি value কোনও ডেটা বাঁধাই ছাড়াই কীভাবে রেন্ডার করব ?


আপনার ইনপুট এবং আউটপুট কি। plz ব্যাখ্যা
নীতীশ কুমার

4
আপনার উদাহরণগুলি আসলে একমুখী ডেটা বাঁধাই (মডেল পরিবর্তনগুলি -> আপডেট দেখুন)। ng-modelআপনাকে দ্বিমুখী ডেটা বাঁধাই দেয়: মডেল পরিবর্তনগুলি -> আপডেট দেখুন, দেখুন পরিবর্তনগুলি -> মডেল আপডেটগুলি।
চিহ্নিত করুন রাজকোক

4
আপডেট হয়েছে। দুঃখিত আমি বোঝাতে চাইছি যে কোনও উপাত্তের বাধ্যবাধকতা নেই
ব্লোজি

10
আমি মনে করি না যে এই প্রশ্নটি ভয়ানক বা ডাউনটাউটের যোগ্য। অপ্রয়োজনীয় ঘড়িগুলি রোধ করতে ডেটা বাইন্ডিংটি অক্ষম করতে চাইলে এটি সত্যই সাধারণ।
ওভারজিলিয়াস

4
আপডেট: এই নিবন্ধটি পড়লে যে কেউ এই ভিডিওটিকে অত্যন্ত দরকারী বলে মনে করবে। youtube.com/watch?v=zyYpHIOrk_Y
ব্লোজি

উত্তর:


141

কৌণিক 1.3+

1.3-এ, কৌনিকটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে এটি সমর্থন করেছে।

<div>{{::message}}</div>

এই উত্তরে উল্লিখিত হিসাবে ।


কৌণিক 1.2 এবং নীচে

এটি সহজ এবং একটি প্লাগইন প্রয়োজন হয় না। এটা দেখ.

এই ছোট নির্দেশটি আপনি যা অর্জন করার চেষ্টা করছেন তা সহজেই সম্পাদন করবে

app.directive('bindOnce', function() {
    return {
        scope: true,
        link: function( $scope ) {
            setTimeout(function() {
                $scope.$destroy();
            }, 0);
        }
    }
});

আপনি একবার এই মত বাঁধাই করতে পারেন

<div bind-once>I bind once - {{message}}</div>

আপনি স্বাভাবিক মত বাঁধাই করতে পারেন

<div ng-bind="message" bind-once></div>

ডেমো: http://jsfiddle.net/fffnb/

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

app.directive('bindOnce', function() {
    return {
        scope: true,
        link: function( $scope, $element ) {
            setTimeout(function() {
                $scope.$destroy();
                $element.removeClass('ng-binding ng-scope');
            }, 0);
        }
    }
});

@ x0b : আপনার যদি ওসিডি থাকে এবং আপনি খালি classবৈশিষ্ট্যটি মুছতে চান তবে এটি করুন

!$element.attr('class') && $element.removeAttr('class')

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

এই দেখুন - এটা বাইন্ডিং উভয় দেখায় dl.dropboxusercontent.com/u/14037764/Development/stackoverflow/...
Blowsie

4
কোনও সন্দেহ ছাড়াই এটি কারণ যদি এনজি-
বন্ডিং

4
এটি বাইন্ডনস প্লাগইনের চেয়ে দুর্দান্ত এবং অনেক সহজ। সুযোগটি নষ্ট করার আগে আমি একটি শর্তের জন্য অপেক্ষা করার ক্ষমতা যুক্ত করেছি এবং এটি সত্যই সহায়ক। ধন্যবাদ
ইয়ারন

4
@ কনनर আমি একমত নই উদাহরণস্বরূপ, আমি একটি REST এপিআই থেকে একটি ভিডিও অবজেক্ট ($ স্কোপ.ভিডিও) পেয়েছি এবং আমি ভিডিও শিরোনামের ($ স্কোপ.ভিডিও.িটিটল) এক-সময় বাঁধাই করতে চাই। এমনকি যদি আমি প্রতিশ্রুতিটি এটি নিয়ামকের স্কোপটিতে যুক্ত করার আগে সমাধান করে ফেলেছি, তবুও আমাকে এনও-বাইন্ড = "ভিডিও.title" বাইন্ড একবার ঘোষনা করতে হবে। এখন, প্রতিশ্রুতি সংশোধন হওয়ার আগে, ভিডিও.টাইটেলটি সংজ্ঞায়িত করা হয়েছে, এবং ভিডিও.title সংজ্ঞায়িত হওয়ার আগে সুযোগটি নষ্ট হয়ে যায়। এর জন্য আমার একটি সমাধান হ'ল উপাদানগুলি লোডিং / আরডি ফ্ল্যাগের কিছু ধরণের, এনজি-ইফ = "কিছুলুডিংফ্ল্যাগ" এ মোড়ানো, তবে এটি একটি নিদর্শন।
স্যারটোফামহ্যাট

49

দেখে মনে হচ্ছে কৌণিক 1.3 (বিটা 10 দিয়ে শুরু) এর মধ্যে এককালীন বাঁধাই রয়েছে:

https://docs.angularjs.org/guide/expression#one-Time- বাইন্ডিং

এককালীন বাঁধাই

:: দিয়ে শুরু হওয়া একটি প্রকাশকে এককালীন প্রকাশ বলে মনে করা হয়। একবারের এক্সপ্রেশনগুলি স্থিতিশীল হওয়ার পরে পুনরায় গণনা বন্ধ হবে, যা প্রথম হজমের পরে ঘটে যদি অভিব্যক্তির ফলাফলটি একটি অপরিজ্ঞাত মান হয় (নীচে মান স্থায়িত্ব অ্যালগরিদম দেখুন)।


4
এই উত্তর বার বার। আমি আপনার যথেষ্ট পরিমাণ প্রশংসা করতে পারছি না কার্ল! আমি এই বৈশিষ্ট্যটি যত তাড়াতাড়ি বোঝায় ততই আগ্রাসী ব্যবহারের সুপারিশ করছি।
এক্সডিএস

4
বাহ আমি স্ক্রোল ডাউন সত্যিই খুশি। আমি কনারকে তার গৃহীত উত্তরে এটি উল্লেখ করতে বলছি।
জেসগার

আমার কাছে 2000 টি লাইন সহ একটি টেবিল / তালিকা রয়েছে এবং ওয়ান-টাইম-বাইন্ডিং অপারেটরটি ব্যবহার করে আমার অ্যাপ্লিকেশনটি তালিকাটি প্রথম দেখানোর / উপস্থাপন করার সময় অত্যন্ত ধীর হয়ে যায়। এত আস্তে, ব্রাউজারটি আমাকে দু'বার তিনবার জিজ্ঞাসা করে যদি আমি স্ক্রিপ্টটি চালানো বন্ধ করতে চাই!
বিলি জি

@ বিলি-জি আপনি সমস্যাটি বর্ণনা করে কোনও জিসফিডাল বা প্লঙ্কার পোস্ট করতে পারেন?
জেমস ডেইলি

@ জেমস ডেইলি: এখানে "সাধারণ" কেস plnkr.co/edit/rCRP0T5fSgNIllx7F27y এবং এখানে "এককালীন প্রকাশ" কেস plnkr.co/edit/Rd5VBVjkcX3sTJYGypUr তবে ... আমি সেখানে এটি পুনরুত্পাদন করতে পারি না। যাইহোক, এটি "ওয়ান-টাইম এক্সপ্রেশন" দিয়ে দ্রুত হয় না এবং আমার পরিবেশে এটি কেন হয় তা অনুসন্ধান করার জন্য আমাকে আরও তদন্ত করতে হবে (আমি কৌণিকের মধ্যে 1.3 বিটা 18 ব্যবহার করি)
বিলি জি

20

বাইন্ডনস মডিউলটি ব্যবহার করুন । আপনাকে জেএস ফাইল অন্তর্ভুক্ত করতে হবে এবং এটি আপনার অ্যাপ্লিকেশন মডিউলের নির্ভরতা হিসাবে যুক্ত করতে হবে:

var myApp = angular.module("myApp", ['pasvaz.bindonce']);

এই লাইব্রেরিটি আপনাকে একবারে আটকানো আইটেমগুলি রেন্ডার করতে দেয় - যখন সেগুলি প্রথম শুরু করা হয়। এই মানগুলিতে আর কোনও আপডেট অগ্রাহ্য করা হবে। যে জিনিসগুলি রেন্ডার হওয়ার পরে পরিবর্তিত হবে না সেগুলির জন্য পৃষ্ঠাতে ঘড়ির সংখ্যা হ্রাস করার এটি দুর্দান্ত উপায়।

ব্যবহারের উদাহরণ:

<div bo-text="value"></div>

যখন valueএটির মতো ব্যবহার করা হয়, নীচের সম্পত্তিটি একবার এটি উপলভ্য হয়ে গেলে সেট করা হবে তবে তারপরে ঘড়িটি অক্ষম করা হবে।


4
আমি একটি উত্তর লিখতে যাচ্ছিলাম "আপনার নিজের নির্দেশিকা লিখুন ...", তবে দেখে মনে হচ্ছে কেউ ইতিমধ্যে আমাদের পক্ষে তা করে ফেলেছেন, দুর্দান্ত।
চিহ্নিত করুন রাজকোক

4
বিনডনস যথেষ্ট দরকারী যে এটি একটি বিল্ট-ইন alচ্ছিক লাইব্রেরি হিসাবে যেমন অন্তর্ভুক্ত করা যেতে পারে $resource
ওভারজিলিয়াস

6
এটি আমি যা খুঁজছিলাম, তবে আমি এই জাতীয় কিছুটি কৌণিকের মধ্যে তৈরি হওয়ার আশা করছিলাম!
ব্লুসি

7

@ ওভারজিলিয়াস এবং @ কনর জবাবগুলির মধ্যে তুলনা:

কৌণিকের gতিহ্যগত এনজিআরপিট সহ: 2000 সারিগুলির 15s এবং র্যামের 420 মিমি ( প্লাঙ্কার )

এনজিআরপিট এবং @ ওভারজিলিয়াসের মডিউল সহ: 2000 সারিগুলির জন্য 7s এবং র‌্যামের 240 মিমো ( প্লঙ্কার )

এনজিপিপিট এবং @ কননারের নির্দেশনা সহ: 2000 সারিগুলির জন্য 8s এবং র‌্যামের 500 মিমি ( প্লঙ্কার )

আমি গুগল ক্রোম 32 দিয়ে আমার পরীক্ষা করেছি।


4
angular-onceতুলনা করতে ভাল লাগবে । ধন্যবাদ
অ্যালেক্সে

@ আলেকেক্সে: আমি যখন AngularJS 1.3 এর একটি স্থিতিশীল বিল্ড প্রকাশিত হবে তখন আমি পরীক্ষাগুলি করার পরিকল্পনা করেছিলাম।
গ্যাব্রিয়েল

ধন্যবাদ, angular-onceপ্যাকেজ অন্তর্ভুক্ত করতে ভুলবেন না (আমি এটি বিকল্প বিকল্প হিসাবে এখানে পোস্ট করেছি)।
অ্যালেক্সেক্স

5

বিকল্প হিসাবে, angular-onceপ্যাকেজ রয়েছে:

আপনি যদি AngularJS ব্যবহার করেন, পারফরম্যান্সের সমস্যা রয়েছে এবং প্রচুর পরিমাণে পঠনযোগ্য ডেটা প্রদর্শন করা প্রয়োজন, এই প্রকল্পটি আপনার জন্য!

angular-onceআসলে অনুপ্রাণিত হয়েছিল bindonceএবং অনুরূপ once-*বৈশিষ্ট্য সরবরাহ করে:

<ul>
    <li ng-repeat="user in users">
      <a once-href="user.profileUrl" once-text="user.name"></a>
        <a once-href="user.profileUrl"><img once-src="user.avatarUrl"></a>
        <div once-class="{'formatted': user.description}" once-bind="user.description"></div>
    </li>
</ul>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.