ng-model值未通过ng-repeat

时间:2016-05-26 03:14:48

标签: javascript angularjs ionic-framework angularjs-filter

我正在尝试使用自定义过滤器来过滤日期范围,保留了文本字段以便在popver中获取用户的日期。它不起作用,而我有另一个文本框来在标题栏中获取名称,并且能够在ng-repeat中获取默认过滤器的值。

我在这里想念的是什么?

Popver中的日期字段

哪个不在任何控制器下,它在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>

过滤

 .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;
        };
      }; 
  });

也尝试使用过滤器 datetime:fromDate: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;
    };
});

1 个答案:

答案 0 :(得分:0)

popover可能正在创建不同的范围,因此您的ng-model已注册到其他范围。

请尝试使用此解决方案:

创建一个全局控制器并将其应用于<html><body>并在其中添加类似内容(<body ng-controller="GlobalController">):

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

现在,改变你的观点:

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

现在,在将其传递到ng-repeat过滤器时,请传递globalModels.fromDate而不是fromDate。对toDate执行相同的操作。