AngularJS মডেল পরিবর্তন দেখার সময় কিভাবে আমি প্রাথমিক লোড উপেক্ষা করব?




angularjs-scope (4)

আমার একটি ওয়েব পৃষ্ঠা রয়েছে যা একটি একক সত্তা জন্য সম্পাদক হিসাবে কাজ করে, যা $ scope.fieldcontainer সম্পত্তিটিতে গভীর গ্রাফ হিসাবে বসায়। আমার REST এপিআই ($ সংস্থার মাধ্যমে) থেকে একটি প্রতিক্রিয়া পাওয়ার পরে, আমি 'ক্ষেত্রের কন্টেইনারে' একটি ঘড়ি যোগ করি। পৃষ্ঠা / সত্তা "নোংরা" কিনা তা সনাক্ত করার জন্য আমি এই ঘড়ির ব্যবহার করছি। এই মুহূর্তে আমি সংরক্ষণ বাটন বাউন্স তৈরি করছি কিন্তু প্রকৃতপক্ষে আমি সংরক্ষণ বাটনটিকে অদৃশ্য করতে চাই না যতক্ষন না ব্যবহারকারী মডেলটি নষ্ট করে।

আমি যা পেয়েছি তা হল ঘড়িটির একমাত্র ট্রিগার যা আমি মনে করি কারণ .fieldcontainer = ... আমি আমার ঘড়ি তৈরির পরে অবিলম্বে সঞ্চালিত হয়। আমি প্রাথমিক মিথ্যা অ্যালার্ম শোষণ করার জন্য একটি "dirtyCount" সম্পত্তি ব্যবহার করার কথা ভাবছিলাম কিন্তু এটি খুব হ্যাকি অনুভব করে ... এবং আমি মনে করেছি যে এটির সাথে মোকাবিলা করার জন্য একটি "কৌণিক idiomatic" উপায় থাকা উচিত - আমি একমাত্র নই একটি নোংরা মডেল সনাক্ত করার জন্য একটি ঘড়ি ব্যবহার করে।

এই কোডটি যেখানে আমি আমার ঘড়ি সেট করেছি:

 $scope.fieldcontainer = Message.get({id: $scope.entityId },
            function(message,headers) {
                $scope.$watch('fieldcontainer',
                    function() {
                        console.log("model is dirty.");
                        if ($scope.visibility.saveButton) {
                            $('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300);
                        }
                    }, true);
            });

আমি যদি মনে করি যে "if (dirtyCount> 0)" এর সাথে আমার "UI নোংরাং" কোডটি সুরক্ষিত করার চেয়ে এটি করার জন্য একটি পরিচ্ছন্ন উপায় হওয়া উচিত বলে মনে হচ্ছে ...


আমি এই প্রশ্নের উত্তর দেওয়া হয়েছে বুঝতে, তবে আমার একটি পরামর্শ আছে:

$scope.$watch('fieldcontainer', function (new_fieldcontainer, old_fieldcontainer) {
    if (typeof old_fieldcontainer === 'undefined') return;

    // Other code for handling changed object here.
});

পতাকা ব্যবহার করে কিন্তু একটি কোড গন্ধ একটি বিট আছে এটি আপনি মনে করেন না?


প্রথমবার শ্রোতা বলা হয়, পুরানো মান এবং নতুন মান একই হতে হবে। তাই শুধু এই কাজ:

$scope.$watch('fieldcontainer', function(newValue, oldValue) {
  if (newValue !== oldValue) {
    // do whatever you were going to do
  }
});

এটি আসলে হ'ল এঙ্গুলার ডক্সগুলি পরিচালনা করার পরামর্শ দেয় :

একটি পর্যবেক্ষক সুযোগের সাথে নিবন্ধিত হওয়ার পরে, শ্রোতা fn অ্যানক্রক্রোনাসটি ($ evalAsync এর মাধ্যমে) ভিউচার আরম্ভ করতে বলে। বিরল ক্ষেত্রে, এটি অযৌক্তিক কারণ দর্শকদের বলা হয় যখন watchExpression এর ফলাফল পরিবর্তন হয়নি। শ্রোতা fn মধ্যে এই দৃশ্যকল্প সনাক্ত করতে, আপনি newVal এবং oldVal তুলনা করতে পারেন। যদি এই দুটি মানগুলি সমান (===) হয় তবে শ্রোতাটি সূত্রপাতের কারণে বলা হয়


বর্তমান মান লোড করার সময় পুরানো মান ক্ষেত্রটি অনির্ধারিত হয়। সুতরাং নিচের উদাহরণটি প্রাথমিক লোডগুলি বাদ দেওয়ার জন্য আপনাকে সহায়তা করে।

$scope.$watch('fieldcontainer', 
  function(newValue, oldValue) {
    if (newValue && oldValue && newValue != oldValue) {
      // here what to do
    }
  }), true;

শুধু নতুন Val রাষ্ট্রের বৈধ:

$scope.$watch('fieldcontainer',function(newVal) {
      if(angular.isDefined(newVal)){
          //Do something
      }
});






angularjs-scope