8

मैं एक ng-repeat इस प्रकार का फ़िल्टर का उपयोग कर:कोणीय में एक वस्तु चर करने के लिए फ़िल्टर नियत जे एस

#1 
<div class="contestReports" ng-repeat="contest in contests | filter:{votingOver:true}"> 
    <contestreport></contestreport> 
</div> 

मैं ग्राहक तो मैं एक करने के लिए फिल्टर सौंपा है यह फिल्टर करने के लिए सक्षम होने के लिए अनुमति देना चाहते हैं इस तरह चर:

#2 
<div ng-init="reportFilter = {votingOver:true}"></div> 
<div class="contestReports" ng-repeat="contest in contests | filter:reportFilter"> 
    <contestreport></contestreport> 
</div> 

कोड #1 काम कर रहा है लेकिन कोड #2 नहीं है और मुझे यकीन है कि क्यों नहीं कर रहा हूँ।

+0

कृपया इस http://plnkr.co/edit/nFFHmUA7RdxMIPV9VUDC?p=preview –

+0

पर एक नज़र डालें जो सादे से खोज रहा है xt और ऑब्जेक्ट फ़िल्टर – Jordash

+0

सामान्य में ngInit किसी भी तरह का उपयोग करने के लिए एक अच्छा अभ्यास नहीं है - https://docs.angularjs.org/api/ng/directive/ngInit, या यह आपके लिए सैद्धांतिक प्रश्न है? – shershen

उत्तर

3

तुम भी रूप में मैं मेरी टिप्पणी में कहा गया गया है, ng-init

<div ng-init="(reportFilter = '{votingOver:true}')"></div> 

रैप करने के लिए हालांकि कोशिश की पहले - angularjs documentation कहा गया है कि ngInit का उपयोग कर ज्यादातर सभी मामलों में एक बुरी बात है। इसलिए यदि संभव हो तो आपकी समस्या का समाधान नहीं होना चाहिए।

और अपने # 2 कोड वास्तव में काम करता है, इस खनखनाहट की जाँच करें - http://plnkr.co/edit/dBDyYPd3ZoUVdXngu52t?p=preview

//html 
    <div ng-init="reportFilter = {votingOver:false}"></div> 
<div class="contestReports" ng-repeat="contest in contests | filter:reportFilter"> 
    {{contest | json}} 
</div> 

    </div> 

//js in controller 
    $scope.contests = [ 
    {id:1, title:'1', votingOver:false}, 
    {id:2, title:'2', votingOver:true}, 
    {id:3, title:'3', votingOver:true} 
    ]; 
2

ng-init is not a good way to go with का उपयोग करना (के रूप में आप कोणीय डॉक्स लाल रंग में चेतावनी पाठ जोड़ा गया है देख सकते हैं)। जैसा कि आप जानते हैं कि यह केवल प्रारंभिक प्रतिपादन पर मूल्यांकन करने जा रहा है (ng-initpreLink चरण में इसकी अभिव्यक्ति का मूल्यांकन करता है)।

अपने कोड को देखकर, ऐसा लगता है कि reportFilter वैरिएबल सभी contests के लिए एक सामान्य वस्तु होने जा रहा है। यदि मैं गलत हूं तो मुझे सही करों?

मैं इस मान को केवल एक बार नियंत्रक के अंदर जोड़ दूंगा।

//place this inside your controller 
$scope.reportFilter = { votingOver : true }; 

और सीधे स्वयं को देखने पर उपयोग करें।

<div class="contestReports" ng-repeat="contest in contests | filter:reportFilter"> 
    <contestreport></contestreport> 
</div> 
1

बेहतर तरीका एनजी-दोहराने से पहले एक चर में json डेटा को फ़िल्टर लागू करने का परिणाम को बचाने के लिए है नीचे की तरह jsonArray में आइटम पढ़ता है।

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app> 
 
    <div ng-init="contests= 
 
     [{name:'bad apple', votingOver:false}, 
 
     {name:'pleasurebuilder', votingOver:true}, 
 
     {votingOver:true}]"> 
 
    </div> 
 
    <div ng-init="reportFilter = {votingOver:true}"> 
 
    </div> 
 
    <div ng-repeat="contest in revoluza = (contests | filter: reportFilter)"> 
 
    {{contest}} 
 
    </div> 
 
    <hr> 
 
</div>

1

कोड 2 काम नहीं कर रहा है क्योंकि आप कस्टम फिल्टर बनाने के लिए, जबकि आप केवल div intializing रहे फिल्टर

बनाने नहीं

कोड 1 काम कर रहा है क्योंकि आप डिफ़ॉल्ट के लिए उचित सिंटैक्स का उपयोग कर रहे हैं फ़िल्टर की तुलना किसी भी ऑब्जेक्ट से की जा सकती है जैसे आपने

संबंधित मुद्दे