जवाबों:
अपने घटक के टेम्प्लेट में आप उन्हें कॉलन के साथ अलग करके कई तर्कों का उपयोग कर सकते हैं:
{{ myData | myPipe: 'arg1':'arg2':'arg3'... }}
आपके कोड से यह इस तरह दिखेगा:
new MyPipe().transform(myData, arg1, arg2, arg3)
और अपने पाइप के अंदर अपने परिवर्तन कार्य में आप इस तरह के तर्कों का उपयोग कर सकते हैं:
export class MyPipe implements PipeTransform {
// specify every argument individually
transform(value: any, arg1: any, arg2: any, arg3: any): any { }
// or use a rest parameter
transform(value: any, ...args: any[]): any { }
}
बीटा 16 और उससे पहले (2016-04-26)
पाइप एक ऐसा सरणी लेते हैं जिसमें सभी तर्क होते हैं, इसलिए आपको उन्हें इस तरह से कॉल करने की आवश्यकता है:
new MyPipe().transform(myData, [arg1, arg2, arg3...])
और आपका परिवर्तन कार्य इस तरह दिखेगा:
export class MyPipe implements PipeTransform {
transform(value:any, args:any[]):any {
var arg1 = args[0];
var arg2 = args[1];
...
}
}
arg1
और arg2
जहां दोनों वैकल्पिक हो और आप केवल पास करना चाहते हैं तो टेम्पलेट बिट कैसा दिखेगा arg2
?
undefined
पहले तर्क के रूप में पास करते हैं, तो उसे इसका डिफ़ॉल्ट मान मिलेगा।
transform(value:any, arg1:any, arg2:any, arg3:any)
बाकी ऑपरेटर का उपयोग करना बेहतर लगता है मुझे लगता है:transform(value:any, ...args:any[])
बीटा.16 के बाद से पैरामीटर transform()
अब विधि के लिए सरणी के रूप में पारित नहीं किया जाता है, बल्कि व्यक्तिगत मापदंडों के रूप में:
{{ myData | date:'fullDate':'arg1':'arg2' }}
export class DatePipe implements PipeTransform {
transform(value:any, arg1:any, arg2:any):any {
...
}
https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta16-2016-04-26
पाइप अब तर्कों की एक परिवर्तनीय संख्या लेते हैं, और एक ऐसा सरणी नहीं जिसमें सभी तर्क होते हैं।
arg1
और arg2
जहां दोनों वैकल्पिक हो और आप केवल पास करना चाहते हैं तो टेम्पलेट बिट कैसा दिखेगा arg2
?
arg1
? की तरह isFullDate
। मैं सिर्फ इसलिए पूछ रहा हूं क्योंकि हर उदाहरण इसका उपयोग करता है।
'arg1'
और 'arg2'
पाइप के अतिरिक्त मापदंडों के रूप में पारित स्ट्रिंग स्ट्रिंग शाब्दिक हैं। आप उस मान पर उपलब्ध किसी भी मान या संदर्भ का उपयोग कर सकते हैं (वर्तमान घटक उदाहरण)
मैं ऑब्जेक्ट्स के सरणियों को फ़िल्टर करने के लिए कोणीय 2+ में पाइप का उपयोग करता हूं। निम्नलिखित कई फ़िल्टर तर्क लेता है, लेकिन आप केवल एक भेज सकते हैं यदि वह आपकी आवश्यकताओं के अनुरूप हो। यहाँ एक StackBlitz उदाहरण है । यह उन कुंजियों को खोजेगा जिन्हें आप फ़िल्टर करना चाहते हैं और फिर आपके द्वारा आपूर्ति किए गए मूल्य से फ़िल्टर करते हैं। यह वास्तव में काफी सरल है, अगर यह जटिल लगता है तो यह नहीं है, StackBlitz उदाहरण देखें ।
यहाँ पाइप को * एनफोर डायरेक्टिव में कहा जा रहा है,
<div *ngFor='let item of items | filtermulti: [{title:"mr"},{last:"jacobs"}]' >
Hello {{item.first}} !
</div>
यहाँ पाइप है,
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filtermulti'
})
export class FiltermultiPipe implements PipeTransform {
transform(myobjects: Array<object>, args?: Array<object>): any {
if (args && Array.isArray(myobjects)) {
// copy all objects of original array into new array of objects
var returnobjects = myobjects;
// args are the compare oprators provided in the *ngFor directive
args.forEach(function (filterobj) {
let filterkey = Object.keys(filterobj)[0];
let filtervalue = filterobj[filterkey];
myobjects.forEach(function (objectToFilter) {
if (objectToFilter[filterkey] != filtervalue && filtervalue != "") {
// object didn't match a filter value so remove it from array via filter
returnobjects = returnobjects.filter(obj => obj !== objectToFilter);
}
})
});
// return new array of objects to *ngFor directive
return returnobjects;
}
}
}
और यहाँ फ़िल्टर करने के लिए ऑब्जेक्ट युक्त घटक है,
import { Component } from '@angular/core';
import { FiltermultiPipe } from './pipes/filtermulti.pipe';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
items = [{ title: "mr", first: "john", last: "jones" }
,{ title: "mr", first: "adrian", last: "jacobs" }
,{ title: "mr", first: "lou", last: "jones" }
,{ title: "ms", first: "linda", last: "hamilton" }
];
}
GitHub उदाहरण: यहाँ इस उदाहरण की एक कार्यशील प्रतिलिपि बनाएँ
* कृपया ध्यान दें कि गंटर द्वारा प्रदान किए गए उत्तर में, गंटर कहता है कि सरणियों का उपयोग अब फिल्टर इंटरफेस के रूप में नहीं किया जाता है, लेकिन मैंने उनके द्वारा प्रदान किए गए लिंक को खोजा और उस दावे पर कुछ भी नहीं बोल पाया। इसके अलावा, StackBlitz उदाहरण प्रदान करता है कि यह कोड कोणीय 6.1.9 में इरादा के अनुसार काम करता है। यह Angular 2+ में काम करेगा।
हैप्पी कोडिंग :-)
से विस्तारित: user3777549
डेटा के एक सेट पर बहु-मूल्य फ़िल्टर (केवल शीर्षक कुंजी के संदर्भ में)
एचटीएमएल
<div *ngFor='let item of items | filtermulti: [{title:["mr","ms"]},{first:["john"]}]' >
Hello {{item.first}} !
</div>
filterMultiple
args.forEach(function (filterobj) {
console.log(filterobj)
let filterkey = Object.keys(filterobj)[0];
let filtervalue = filterobj[filterkey];
myobjects.forEach(function (objectToFilter) {
if (!filtervalue.some(x=>x==objectToFilter[filterkey]) && filtervalue != "") {
// object didn't match a filter value so remove it from array via filter
returnobjects = returnobjects.filter(obj => obj !== objectToFilter);
}
})
});