I have a problem for filtering a table in AngularJS into ng-repeat.
I would like to add radio button (based on table column) under a search 
text field for adding more filters. 

For the moment when I enter "char" in the text field, the system filters 
correctly the table and displays all results.
My goal: if I select the radio button "Person", only the results with the 
person containing "char" should appear. If I click on "company", the radio 
button "Person" should be unselected and only result with the company 
containing "char" should appear.

*Here my view:*

    <div class="spacer input-group">
        <div class="input-group-addon">
            <span class="glyphicon glyphicon-search"></span>
        </div>
        <input type="text" ng-model="searchText" class="form-control" 
placeholder="Search name..." ng-change="search(searchText)"/>
        <div class="input-group-btn">
            <button class="btn btn-default" ng-click="razRecherche()">
                <span class="glyphicon glyphicon-remove"></span>
            </button>
        </div>
    </div>
    
    <div>
        <!-----------------HERE THE RADIO BUTTONS ----------- START --->
        <input type="radio" name="filter" value="PERSON" ng-model=
"search.PERSON">
        <label for="PERSON">Person</label>

        <input type="radio" name="filter" value="COMPANY" ng-model=
"search.COMPANY">
        <label for="COMPANY">Company</label>
        <!-----------------HERE THE RADIO BUTTONS ------------- END --->
    </div>
    
    
    <div class="table-responsive" id="allContacts">
        <table ng-show="contacts.length" class="table table-striped 
table-hover spacer">
            <thead>
                <tr>
                    <th class="colPerson">
                        <a href="" ng-click="personsSort('PERSON')">Person
</a>
                        <span class="hSpacer" ng-class=
"cssChevronsTri('PERSON')"></span>
                    </th>
                    <th class="colCompany">
                        <a href="" ng-click="personsSort('COMPANY')">Company
</a>
                        <span class="hSpacer" ng-class=
"cssChevronsTri('COMPANY')"></span>
                    </th>
                    <th class="colDescription">
                        <a href="" ng-click=
"personsSort('REQUESTDESCRIPTION')">Description</a>
                        <span class="hSpacer" ng-class=
"cssChevronsTri('REQUESTDESCRIPTION')"></span>
                    </th>
                </tr>
            </thead>       
    
    
            <tbody ng-repeat="contact in contacts | filter:searchText | 
orderBy:champTri:triDescendant">
                <tr class="clickable">
                    <td class="colPerson" ng-click=
"selContact(contact,contact.ID)" ng-class="{sel:selIdx==$index}"><a href=
"#/view-contacts/{{contact.ID}}">{{contact.PERSON}}</a></td>
                    <td class="colCompany" ng-click=
"selContact(contact,contact.ID)">{{contact.COMPANY}}</td>
                    <td class="colDescription" ng-click=
"selContact(contact,contact.ID)">{{contact.REQUESTDESCRIPTION}}</td>        
                </tr>
            </tbody>    
        </table>
    </div> 



*My controller:*

 
   app.controller('ctrlContacts', function ($scope, $timeout, ContactService
){
    
        $scope.search = function(searchText) {
            $scope.reloadPreviousSearch = false;
    
            if (!searchText.length) {
                //alert("searchText empty");
            }
            if (searchText.length>2) {
    
                $timeout(function () {
                    // RETRIEVE DATA FROM JSON OBJECT OF THE SERVER SEVICE 
AND A DB QUERY - OK
                    ContactService.fastSearch(searchText).success(function(
contacts){
                        console.log("query fastSearch OK");                 
            
                        var length = contacts.length;
                        $scope.loading = false;
    
                        if (length == 0) {
                            $scope.searchButtonText = "No result";          
                        }else {
                            $scope.searchButtonText = length + " results 
found";        
                        }
                        // For the orderby date
                        for (var i=0; i<length; i++) {
                            if(contacts[i].REQUESTTRUEDATE!=""){
                                contacts[i].REQUESTTRUEDATE = new Date(
contacts[i].REQUESTTRUEDATE.replace(/-/g,"/"));
                            }else{
                                contacts[i].REQUESTTRUEDATE=null;
                            }
                        }           
    
                        $scope.contacts = contacts; 
                        $scope.champTri='PERSON';
    
                        $scope.selIdx= -1;
    
                        $scope.selContact=function(contact,idx){
                            $scope.selectedContact=contact;
                            $scope.selIdx=idx;
                            window.location="#/view-contacts/" + idx;
                        }
    
                        $scope.isSelContact=function(contact){
                            return $scope.selectedContact===contact;
                        }           
    
                    });                                         
                }, 1000);               
            }else{
                $scope.contacts=null;
            }   
        }
    
    
        // SEARCH
    
        $scope.searchText = null;
        $scope.razRecherche = function() {
            $scope.searchText = null;
            $scope.contacts=null;
        }   
    
        // SORT
    
        $scope.champTri = null;
        $scope.triDescendant = false;
        $scope.personsSort = function(champ) {
            if ($scope.champTri == champ) {
                $scope.triDescendant = !$scope.triDescendant;
            } else {
                $scope.champTri = champ;
                $scope.triDescendant = false;
            }   
        }
    
        $scope.cssChevronsTri = function(champ) {
            return {
                glyphicon: $scope.champTri == champ,
                'glyphicon-chevron-up' : $scope.champTri == champ && !$scope
.triDescendant,
                'glyphicon-chevron-down' : $scope.champTri == champ && 
$scope.triDescendant 
            };
        }
    
    });



I'm trying to add the radio buttons for filtering the table from the text 
entered in the text field. But I don't know how to use them for filtering 
the table into the ng-repeat.

Could you please help me to add the filters on the text field (searchText) 
with the radio buttons?

Thank you in advance for your help.

-- 
You received this message because you are subscribed to the Google Groups 
"Angular and AngularJS discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to