javascript - AngularJS में एक फ़िल्टर से स्कोप चर का उपयोग करें




scope (2)

मैं अपने कस्टम फ़िल्टर में date मूल्य पास कर रहा हूं:

angular.module('myapp').
  filter('filterReceiptsForDate', function () {
    return function (input, date) {
      var out = _.filter(input, function (item) {
        return moment(item.value.created).format('YYYY-MM-DD') == date;
      });
      return out;
    }
  });

मैं वहां कुछ स्कोप वैरिएबल इंजेक्ट करना चाहता हूं, जैसे मैं निर्देशों में क्या कर सकता हूं। क्या यह कार्य स्पष्ट रूप से कार्य तर्कों के रूप में इन वर्रों को पारित किए बिना करना संभव है?


जाहिर है आप कर सकते हैं।

आम तौर पर आप फ़ंक्शन पैरामीटर के रूप में फ़िल्टर में स्कोप वेरिएबल पास करेंगे:

function MyCtrl($scope){
  $scope.currentDate = new Date();
  $scope.dateFormat = 'short';
}
<span ng-controller="MyCtrl">{{currentDate | date:dateFormat}}</span> // --> 7/11/13 4:57 PM

लेकिन, वर्तमान दायरे को पारित करने के लिए, आपको यह पास करना होगा:

<span ng-controller="MyCtrl">{{currentDate | date:this}}</span>

और this वर्तमान दायरे का संदर्भ होगा:

सरलीकृत:

app.controller('AppController',
    function($scope) {
      $scope.var1 = 'This is some text.';
      $scope.var2 = 'And this is appended with custom filter.';
    }
  );


app.filter('filterReceiptsForDate', function () {
  return function (input, scope) {
    return input + ' <strong>' + scope.var2 + '</strong>';
  };
});
<div ng-bind-html-unsafe="var1 | filterReceiptsForDate:this"></div>
<!-- Results in: "This is some text. <strong>And this is appended with custom filter.</strong>" -->

PLUNKER

चेतावनी:

  1. इसके साथ सावधान रहें और फ़िल्टर के अंदर मूल्यों को पढ़ने के लिए केवल स्कोप का उपयोग करें, क्योंकि अन्यथा आप आसानी से $ digest loop में अपना स्वयं का पता लगाएंगे।
  2. ऐसे फ़िल्टर जिन्हें ऐसे "भारी" निर्भरता (पूरे दायरे) की आवश्यकता होती है, परीक्षण करना बहुत कठिन होता है।

मैंने पाया कि this स्थानीय $scope संदर्भ देता है। सुनिश्चित नहीं है कि यह इसे एक्सेस करने का सुरक्षित तरीका है या नहीं।





scope