2013-06-26 7 views
5

मुझे जो चाहिए वह this प्रलेखन में उदाहरण है, लेकिन एक अद्वितीय इनपुट के साथ जो "किसी भी", "नाम" या "फोन" गुणों द्वारा फ़िल्टरिंग की तीन भूमिकाओं को चला सकता है, का परिवर्तन एक एंकर क्लिक द्वारा भूमिका निभाई जाती है। यहां कोड तैयार है http://jsfiddle.net/ubugnu/QuyCU/ मैं एनजी-मॉडल विशेषता को गतिशील रूप से कैसे अपडेट कर सकता हूं?angularjs: फ़िल्टर विकल्पों को गतिशील रूप से बदलें

एचटीएमएल

<div ng-app> 
    <div ng-controller="MainCtrl"> 

     <label>Any</label> <input type="text" ng-model="search.$"> <br> 
     <label>Name only</label> <input type="text" ng-model="search.name"><br> 
     <label>Phone only</label> <input type="text" ng-model="search.phone"><br> 

     <div style="background-color:#FAE8F1"> 
     <hr> 

     <label>Filter</label> <input type="text" ng-model="search.$"> by {{filter}} <br> 
     <ul> 
     <li><a href="" ng-click="changeFilterTo('$')">Any</a></li> 
     <li><a href="" ng-click="changeFilterTo('name')">By Name</a></li> 
     <li><a href="" ng-click="changeFilterTo('phone')">By phone</a></li> 
     </ul> 

     <hr> 
     </div> 

     <table class="table"> 
     <tr><th>Name</th><th>Phone</th></tr> 
     <tr ng-repeat="friend in friends | filter:search"> 
      <td>{{friend.name}}</td> 
      <td>{{friend.phone}}</td> 
     </tr> 
     </table> 
    </div> 
</div> 

जे एस

function MainCtrl($scope, $http) { 
    $scope.friends = [{name:'John', phone:'555-1276'}, 
         {name:'Mary', phone:'800-BIG-MARY'}, 
         {name:'Mike', phone:'555-4321'}, 
         {name:'Adam', phone:'555-5678'}, 
         {name:'Julie', phone:'555-8765'}]; 
    $scope.filter = "$"; 
    $scope.changeFilterTo = function(pr) { 
     $scope.filter = pr; 
    } 
}; 

उत्तर

19

आप ng-model तरह परिभाषित कर सकते हैं: ng-model="search[filter]" गतिशील रूप से परिवर्तित करने के लिए जो चर यह आबद्ध किया जाना चाहिए (जहां filter एक और $scope चर रहा है)।

बेला देखें:

$scope.search = {name:'', phone:'', $:''}; 

और इनपुट बदलने के लिए::

<input type="text" ng-model="search[filter]"> 
+0

उत्कृष्ट, बहुत धन्यवाद – ubugnu

+0

यह काफी नहीं काम, बेला में ... खोजने का प्रयास करें करता है का उपयोग करते हुए एक और सरल तरीका है 'ए' और 'फोन' पर क्लिक करें। ऐसा लगता है कि लिंक पर क्लिक किए बिना 'ऑल' पर खोज किया जा रहा है। मुझे लगता है कि इसे केवल एक छोटे से ट्विक या दो काम करने की जरूरत है, हालांकि। –

+0

मुझे लगता है कि यह ठीक काम करता है, लेकिन शायद थोड़ा सा अंतर्ज्ञानी तरीका (लेकिन यह अच्छी तरह से समाधान का प्रदर्शन करता है) - जब आप "किसी भी | नाम से | फ़ोन द्वारा" पर क्लिक करते हैं, तो यह नीचे के टेक्स्टबॉक्स को संबंधित ऊपरी टेक्स्टबॉक्स में से एक से लिंक करता है । तो 'ए' टाइप करना 'ए' को "ए" से भरता है और 'फ़ोन द्वारा' पर क्लिक करता है, नीचे दिए गए टेक्स्टबॉक्स को "फोन" पर स्विच करता है, इसलिए अगली टाइपिंग अकेले "किसी भी" बाधा को छोड़कर फोन की बाधाओं को जोड़ती है .. – lopisan

8

यहाँ एक तरीका है - वहाँ शायद अन्य हैं http://jsfiddle.net/lopisan/vzQKk/1/

आप नियंत्रक करने के लिए इस लाइन जोड़ने के लिए ।

<div ng-app> 
    <div ng-controller="MainCtrl"> 
     <div style="background-color:#FAE8F1"> 
     <hr> 

     <label>Filter</label> <input type="text" ng-model="multi"> by {{filter}}   <br> 
     <ul> 
     <li><a href="" ng-click="changeFilterTo('$')">Any</a></li> 
     <li><a href="" ng-click="changeFilterTo('name')">By Name</a></li> 
     <li><a href="" ng-click="changeFilterTo('phone')">By phone</a></li> 
     </ul> 

     <hr> 
     </div> 

     <table class="table"> 
     <tr><th>Name</th><th>Phone</th></tr> 
     <tr ng-repeat="friend in friends | filter:getFilter()"> 
      <td>{{friend.name}}</td> 
      <td>{{friend.phone}}</td> 
     </tr> 
     </table> 
    </div> 
</div> 

जावास्क्रिप्ट:

function MainCtrl($scope, $http) { 
    $scope.friends = [{name:'John', phone:'555-1276'}, 
         {name:'Mary', phone:'800-BIG-MARY'}, 
         {name:'Mike', phone:'555-4321'}, 
         {name:'Adam', phone:'555-5678'}, 
         {name:'Julie', phone:'555-8765'}]; 
    $scope.filter = "$"; 
    $scope.multi = ""; 
    $scope.changeFilterTo = function(pr) { 
     $scope.filter = pr; 
    } 
    $scope.getFilter = function() { 
     switch ($scope.filter) { 
      case 'name': 
       return {name: $scope.multi}; 
      case 'phone': 
       return {phone: $scope.multi}; 
      default: 
       return {$: $scope.multi} 
     } 
    } 
}; 
+0

बहुत धन्यवाद :-) – ubugnu

1

यहाँ रेडियो बटन

<input type="text" ng-model="search[filter]"> 

<label>filter by these</label> 

<label>Any <input type="radio" ng-model="filter" ng-init="filter = '$'" value="$"></label> 
<label>name<input type="radio" ng-model="filter" value="name"></label> 
<label>phone<input type="radio" ng-model="filter" value="phone"></label> 
संबंधित मुद्दे