javascript - tutorial - कैसे एक फिल्टर को दूसरे फ़िल्टर से कोणीय.जेएस में कॉल करें




angularjs tutorial pdf (4)

@useless ने पूछा कि क्या "डिफ़ॉल्ट फ़िल्टर के लिए ऐसा करने का कोई तरीका था।"

डिफ़ॉल्ट फ़िल्टर का उपयोग करने का एक गोल-तरीका: इसे अपने कस्टम फ़िल्टर पर जाने से पहले मानक फ़िल्टर के माध्यम से पाइप करें और मूल मान को पैरामीटर के रूप में पास करें।

उदाहरण के लिए आपकी कोणीय अभिव्यक्ति इस तरह दिखाई देगी:

{{myDate | date: 'mediumDate' | relativeDate: myDate}}

और आपका फ़िल्टर:

var myApp = angular.module('myApp',[]);
myApp
    .filter('relativeDate', function() {
        return function(formattedDate, dateStr) {
            var returnVal = formattedDate,
                today = new Date(),
                evalDate = new Date(dateStr);
            if (today.getFullYear() == evalDate.getFullYear() &&
                today.getMonth() == evalDate.getMonth() &&
                today.getDate() == evalDate.getDate()) {
                    returnVal = 'Today'
            }
            return returnVal
        }
    })
    .controller('myAppCtrl', ['$scope', function myAppCntrl($scope) {
        $scope.myDate = "2001-01-01T01:01:01";
    });

मेरे पास एक फ़िल्टर है, linkifyStuff, जिसमें मैं चाहता हूं कि कुछ चर दूसरे फ़िल्टर का उपयोग करके संसाधित करें। मैं एक फिल्टर को दूसरे से कॉल करने के लिए सिंटैक्स का पता नहीं लगा सकता।

मैं फिल्टर चेनिंग के बारे में जानता हूं - यह वह नहीं है जो मैं करना चाहता हूं। मैं अपने इनपुट या आउटपुट के लिए नहीं, linkifyStuff फिल्टर में एक स्थानीय चर के लिए एक फ़िल्टर लागू करना चाहते हैं।

मुझे काम करने के लिए फोलोइंग की तरह कुछ की उम्मीद होगी, लेकिन $ फ़िल्टर ('फ़ाल्टरनाम') जाहिरा तौर पर सही वाक्यविन्यास नहीं है।

module.filter('sanitizeStuff', function() {
    // ...
})

module.filter('prettifyStuff', function() {
    // ...
})

module.filter('linkifyStuff', function($filter) {
    return function(text) {
        // ...
        // ...
        return $filter('sanitizeStuff')(foo) + ' whatever ' + $filter('prettifyStuff')(bar)
    }
})

मैं sanitizeStuff और sanitizeStuff के लिए एक सादे js फ़ंक्शन लिख सकता था और इन फ़िल्टर से उस फ़ंक्शन को कॉल कर सकता था लेकिन यह गलत लगता है। कैसे कोणीय तरीके से करने के लिए कोई सलाह?

धन्यवाद।


टिप्पणी इनपुट्स फ़िल्टर करने से पहले मैं कुछ इस तरह से भाग चुका हूं। मेरे पास 4 अलग-अलग फ़िल्टर थे, जब उपयोगकर्ता ने सबमिट पर क्लिक किया था तो यह एक फ़ंक्शन चलाएगा जो टिप्पणी की प्रतिलिपि पर सभी 4 फ़िल्टर चलाएगा। मेरे फ़िल्टर को अच्छे उपाय के लिए वहाँ फेंक दिया। चेतावनी: सुनिश्चित करें कि आप अपने नियंत्रक में $ फ़िल्टर इंजेक्षन करते हैं, जब मैं चीजों को इंजेक्ट करना भूल जाता हूं तो मुझे नफरत है। यहाँ कोड है:

इंजेक्शन:

.controller('Controller', function ($scope, $filter){
    //CODE GOES HERE
});

HTML:

<ul ng-repeat="comment in comments">
    <li>{{comment.user_name}}</li>
    <li dynamic="deliberatelyTrustDangerousSnippet(comment.comment_copy)"></li>
</ul>

नियंत्रक:

$scope.deliberatelyTrustDangerousSnippet = function(comment) {
    comment = $filter('breaks')(comment);
    comment = $filter('links')(comment);
    comment = $filter('images')(comment);
    comment = $filter('youtubeLinks')(comment);
    return comment;

};

फिल्टर:

.filter('breaks', function () {
    return function (text) {
        if (text !== undefined) return text.replace(/&#10;/g, '<br />');
    };
})
.filter('links', function () {
    return function (text) {
        if (text !== undefined){
            return text.replace(/(?:http:\/\/)?(?:www\.)?((?:[\w-\.]*)(?:\.(?:com|net|org|co|be))(?:(?:[\/?\w?=?&?(?:&amp;)?\.?-]*)))/g, '<a target="_blank" href="http://$1">$1</a>');
        }
    };
})
.filter('images', function () {
    return function (text) {
        if (text !== undefined){
            return text.replace(/(?:<.*=")(.*(?:(?:\.(?:jpg|JPG|png|PNG|gif|GIF|jpeg|JPEG))))(?:")(?:.*(?:<\/a>))/g, '<img src="$1"/>');
        }
    };
})
.filter('youtubeLinks', function () {
    return function (text) {
        if (text !== undefined){
            return text.replace(/(?:<.*=")(?:(?:(?:(?:http:\/\/)|(?:www\.)|(?:http:\/\/www\.))(?:(?:youtube\.com.*v=)|(?:youtu\.be\/))((?:\w|\d|-)*)(?:(?:&amp;feature=related)?)))(?:")(?:.*(?:<\/a>))/g, '<youtube id="$1"></youtube>');
        }
    };
})

linkifyStuff <filterName>Filter सिंटैक्स का उपयोग करके अपने फ़िल्टर इंजेक्ट करें। ऐशे ही:

app.filter('linkifyStuff', function(sanitizeStuffFilter,prettifyStuffFilter) {
    return function(text) {

        return sanitizeStuffFilter(text) + ' whatever ' + prettifyStuffFilter(text);
    }
});

DEMO


app.filter('linkifyStuff', function(sanitizeStuffFilter,prettifyStuffFilter) {
    return function(text) {

        return sanitizeStuffFilter(text) + ' whatever ' + prettifyStuffFilter(text);
    }
});

मेरे लिए यह काम नहीं किया। अगर किसी को उपरोक्त कोड के साथ समस्या है। आप इस कोशिश कर सकते हैं जो मेरे लिए बहुत अच्छी तरह से काम किया।

app.filter('linkifyStuff', function($filter) {
        return function(text) {

            return $filter('sanitizeStuffFilter')(text) + ' whatever ' + $filter('prettifyStuffFilter')(text);
        }
    });







angularjs