ng-выберите опцию Не обновлять жесткий список по умолчанию

За свою жизнь я не могу понять, как правильно выбрать опцию, основываясь на данных, возвращающихся из службы. «аттракционы» возвращается просто хорошо, и div получает отображается должным образом, но мой <select>не обновляет или отображение надлежащего предопределенного метода фильтра (то же самое для другого выбора для сортировки). Автоматический фильтр происходит в сервисе и просто возвращает тип фильтра, когда его сделано, чтобы иметь возможность обновить выбор HTML, чтобы он показывал пользователю, какой метод фильтра был выбран. но SELECT просто показывает неопределенный параметр.

Консоль распечатывает в сервисе «[], undefined, undefined», который говорит мне, что выполняется, прежде чем обещание полностью возвращается. Однако, как только обещание будет полностью возвращено, $scope.аттракционы получает определяется как DIV населяет просто хорошо, так почему не выбрать получение правильного значения передается ему?

HTML:

  <select id="rides_filterMenu" ng-model="filter" ng-change="doFilter(filter);">
  <option value="all">All</option>
  <option value="standard">Sedan</option>
  <option value="suv">SUV</option>
  <option value="limo">Limo</option>        
  </select>
<div ng-repeat="ride in rides">
    {{ride.name}} is a {{ride.type}}
</div>

Контроллер:

.controller('RidesCtrl', function($scope,$interval,Rides,constants) {
    [$scope.rides,$scope.filter,$scope.sort] = Rides.all();

Обслуживание:

.factory('Rides', function($http,$q,servicesA,servicesB,servicesC,servicesD,servicesE,serviceF) {
  var rides=[] ;
  var rideFilter;
  var rideSort ;

  function sortRides(sortBy) {
    // sort "rides" here before sending back to controller
  }
  function filterRides(filterBy) {
     // filter "rides" here before sending back to controller
  }
  function getRides() {
    rides = [] ;
    var rideCount = 0 ;

    $q.all([servicesA(),servicesB(),servicesC(),servicesD(),servicesE(),servicesF()]).then(function(response){
      var z=0 ;
      for (var y=0;y<response.length;y++) {
        for (var x=0;x<response[y].length;x++) { 
          response[y][x].rideID = z++ ;
          rides.push(response[y][x]) ;
          if (response[y][x].isType == 1 || response[y][x].isType == 2) {
            rideCount++ ;
          }
        }
      }

      //tInfo is a global var/obj
      if (rideSort) {
        sortRides(rideSort) ;
      } else {
        rideSort = getDB("userRidesSort") ;
        sortRides(rideSort) ;
      }

      if (rideCount < 7) {
        // override default filter if not enough services to show
        rideFilter = "all" ;
        filterRides(rideFilter) ;    
      } else {
        if (tInfo.totalRiders > 7) {
          // override default filter if too many passengers
          rideFilter = "limo" ;          
        } else if (tInfo.filterManual == 1) {
          // do nothing
        } else {
          // if not set, get it and set it.
          rideFilter = getDB("userRidesFilter") ;
        }
        filterRides(rideFilter) ;
      }
      // prints to console with correct values
      console.log("filter: "+rideFilter+ ", sort: " +rideSort) ;
    });
  }

  getRides() ;

  return {
    all: function() {
      // initially prints "[], undefined : undefined"
      // but when $q finishes $scope.rides populates the UI View
      // while $scope.filter & $scope.sort never update the UI View
      console.log(rides+ "," +rideFilter + " : " +rideSort) ;
      return [rides,rideFilter,rideSort] ;
    }

вышеconsole.log, rides первоначально возвращает [], но затем, когда $q закончен, я вижу, что rides[] заполнен и обновлен вид шаблона (уже правильно отсортирован/filterd). rideFilter и rideSort также первоначально вернуться undefined в той же консоли.войти, но даже после обновления пользовательского интерфейса rides, $scope.фильтр и $ scope.сортировать оставайтесь пустым. При 1-м вызове в сервис аттракционы это происходит каждый раз…но если я вручную обновлю аттракционы из представления пользовательского интерфейса, прежде чем $q даже начнет все обещания 2-й раз, я тогда увижу $scope.фильтр и $ scope.sort populate The UIView-which tells me the values are there from the 1st call and they are now received from cache as the 2nd call kicks in but before it fully updates / changes all the values..

1 ответ

  1. Я предлагаю небольшое изменение (предположим, что фильтр является типом езды):

    удаляет событие при выборе:

    <select id="rides_filterMenu" ng-model="filter">
        <option value="">All</option>
        <option value="standard">Sedan</option>
        <option value="suv">SUV</option>
        <option value="limo">Limo</option>        
    </select>
    

    и после этого, фильтруйте сразу на НГ-повторении

    <div ng-repeat="ride in rides | filter: { type: filter}">
        {{ride.name}} is a {{ride.type}}
    </div>