2016-05-26 2 views
1

Ich versuche, benutzerdefinierten Filter zu haben, um den Datumsbereich zu filtern, habe das Textfeld für das Abrufen des Datums vom Benutzer in popver gehalten. Es funktioniert nicht, während ich ein anderes Textfeld habe, um einen Namen in der Kopfzeile zu erhalten und den Wert in ng-repeat für den Standardfilter zu erhalten.ng-Modellwert wird nicht durch ng-repeat

Was habe ich hier vermisst?

Datumsfeld in Popver

Welche nicht unter Steuerung ist, ist es in popver

<label class=" item-input"> 
    <span class="input-label" style="width:50%;font-size:14px;">From Date</span> 
    <input type="text" ng-model="fromDate"/> 
    </label> 

HTML - ng-repeat

<div ng-repeat="item in Items | filter: custname | filter: applyDateFilter(fromDate, toDate)"> 
     <div class="row item wrap"> 
      <div class="col col-95"> 
      <ion-checkbox ng-model="item.Selected"> 
       <div class="row"> 
       <div class="col col-67"> 
        <p>{{item.name}}</p> 
       </div> 
       <div class="col col-33 right"> 
        <p>{{item.order_date | datetimeFormat }}</p> 
       </div> 
       </div> 
      </ion-checkbox> 
      </div> 
     </div> 
     </div> 

Filter

.controller("dbController", function($scope, $rootScope) { 
    $scope.applyDateFilter = function(from, to) { 
     return function(items, from, to) { 
      console.log(items); 
      console.log('from '+from); 
      console.log('to '+to); 
      console.log('fromDate '+$scope.fromDate); 
      console.log('toDate '+toDate); 

      var result = []; 

      if(from == 0 && to == 0) 
       return items; 

      if(from != '' && to != ''){ 
       var df = parseDate(from); 
       var dt = parseDate(to); 

       for (var i=0; i<items.length; i++){ 
        var tf = new Date(items[i].order_date * 1000); 
        if (tf >= df && tf <= dt) { 
         result.push(items[i]); 
        } 
       } 
      }    
      return result; 
     }; 
     }; 
    }); 

auch mit Filter versucht, indem man wieDatetime: VonDatum: toDate

.filter('datetime', function($filter){ 
    return function(items, fromDate, toDate){ 
     from = fromDate; 
     to = toDate; 
     var result = []; 
     if(from == 0 && to == 0) 
      return items; 
     if(from != '' && to != ''){ 
      var df = parseDate(from); 
      var dt = parseDate(to); 
      for (var i=0; i<items.length; i++){ 
       var tf = new Date(items[i].order_date * 1000); 
       if (tf >= df && tf <= dt) { 
        result.push(items[i]); 
       } 
      } 
     }    
     return result; 
    }; 
}); 
+0

Stellen Sie eine Geige zur Verfügung, um Ihren Fluss zu überprüfen. –

+0

Wie öffnest du dein Popover? Verwenden Sie den UI-Bootstrap? –

Antwort

0

Die popover möglicherweise einen anderen Umfang erschaffen, damit Ihre ng-model zu einem anderen Bereich registriert zu werden.

diese Lösung Versuchen Sie stattdessen:

einen globalen Controller erstellen und die entweder auf <html> oder <body> und in ihm (<body ng-controller="GlobalController">) so etwas wie setzen gilt:

myApp.controller('GlobalController', function($scope, $rootScope) { 
    $rootScope.globalModels = {}; 
    // Or use below if you are using ui-bootstrap 
    // $scope.globalModels = {}; 
}); 

Nun ändern Sie Ihre Ansicht:

<label class=" item-input"> 
    <span class="input-label">From Date</span> 
    <input type="text" ng-model="globalModels.fromDate"/> 
</label> 

Jetzt, wenn es an Filter in ng-repeat übergeben wird, übergeben Sie globalModels.fromDate inst ead von nur fromDate. Tun Sie dasselbe für toDate.

+0

Entschuldigung für die späte Antwort, ich verwende ionische. Ich habe versucht sowohl $ rootScope und $ Scope, aber immer noch das gleiche. VonDate als undefiniert, zuDate als ''. Versucht, den Namen zu ändern, hat auch nicht funktioniert. Habe auch versucht, das Element direkt in den Header zu verschieben, statt auf Popover, kein Glück. – Shankar

Verwandte Themen