2016-09-19 3 views
1

Я фильтрую массив (результатов) с запросом. Удалив фильтр, результаты точно отображает все элементы. Удалив http.get, который обновляет результаты и инициализирует результаты, чтобы содержать элементы, фильтр точно фильтрует.Угловой ng-повтор с фильтром, не обновляющимся с помощью http.get

С как фильтром и http.get обновлением результатов, сообщение для каких-либо результатов показывает, даже если результатов содержат данные. Я подтвердил, что результаты должным образом обновлены http.get (как показано {{results}}, показывая правильно ниже). Ниже какие {{}} Результаты отображает:

[ 
    { 
    "name": "Company Number 1 ", 
    "description": "description of 1 " 
    }, 
    { 
    "name": "Company Number 1 ", 
    "description": "description of 1 " 
    }, 
    { 
    "name": "Company Number 2 ", 
    "description": "description of 2 " 
    } 
] 

index.html

<div class="form-group label-floating"> 
    <label class="control-label" for="addon1">Filter</label> 
    <input id="addon1" class="form-control" type="text" data-ng-model="query"> 
</div> 

{{results}} <!--This works properly--> 

<table class="table table-striped" id="resultsTable"> 
    <tbody> 
    <tr data-ng-show="resultsFilter.length === 0"> 
     <td class="center" colspan="3">No results found.</td> <!--This message appears even when results should have elements--> 
    </tr> 
    <tr data-ng-repeat="result in resultsFilter = (results | filter:query | limitTo:displayNum) track by result.name"> 
     <td> 
      <button class="btn btn-primary btn-block"> 
       {{result.name}} 
      </button> 
     </td> 
    </tr> 
    </tbody> 
</table> 

angular.js

$scope.query = ""; 
$scope.displayNum = 20; 
$scope.results = []; 
... 
$scope.updateResults = function() { 
    $http({ 
    method: "GET", 
    url: requestUrl, 
    params: {id: $scope.identifierInHierarchy.companyId} 
}) 
    .then(function successCallback(response) { 
     $scope.query = ""; 
     $scope.results = []; 
     response.data.forEach(function (entry) { 
      $scope.results.push({ 
       name: "Company Number " + entry.CompanyNumber, 
       description: "description of " + entry.CompanyNumber 
      }); 
     }); 
    }, 
     function errorCallback(response) { 
     }); 
} 

Update: Нет, изменение resultsFilter к результатам не решает проблему. Я также считаю, что это неверно, так как сохранение результатовFilter и инициализация результатов статически будут правильно фильтроваться (как было сказано ранее).

+0

Где вы заявляете результаты? –

+0

Это не объявлено (или как-то объявлено одновременно с его назначением, я не уверен). Тем не менее, фильтрация работает, когда результаты не обновляются с помощью GET. Чтобы быть тщательным, я добавил объявление $ scope.resultsFilter = [] после объявления результатов, но это фактически привело к сообщению «без результатов», показывающему одновременно с результатами (когда результаты не обновляются с помощью GET). С GET изменений не было, и только результаты не показывались. –

+0

Я нашел ресурс (и рассуждения), который я использовал для создания результатов. Фильтр: http://angular-tips.com/blog/2014/08/tip-accessing-filtered-array-outside-ng-repeat/ –

ответ

0

Вы используете resultsFilter везде, где нет объявленных. Это должно быть results.

<table class="table table-striped" id="resultsTable"> 
<tbody> 
<tr data-ng-show="{{results.length}} === 0"> 
    <td class="center" colspan="3">No results found.</td> <!--This message appears even when results should have elements--> 
</tr> 
<tr data-ng-repeat="result in results = (results | filter:query | limitTo:displayNum) track by result.name"> 
    <td> 
     <button class="btn btn-primary btn-block"> 
      {{result.name}} 
     </button> 
    </td> 
</tr> 
</tbody> 

+0

Нет, меняя resultsFilter к результатам не решает проблему. Я также считаю, что это неверно, так как сохранение результатовFilter и инициализация результатов статически будут правильно фильтроваться (как было сказано ранее). –

+0

У вас отсутствует символ углового выражения '{{}}' around 'data-ng-show =" results.length === 0'. Проверьте его. 'Results.length' должно быть' {{results.length}} ' –

+0

Как есть, фильтрация работает, когда GET не используется для обновления результатов. Добавив {{}}, фильтрация не работала с GET или без нее. –

0

Это не показывающего никакого результата из-за этого

<tr data-ng-show="resultsFilter.length === 0"> 
     <td class="center" colspan="3">No results found.</td> <!--This message appears even when results should have elements--> 
    </tr> 

resultsFilter объем ограничен нг-повтор, и вы пытаетесь получить к нему доступ выше рамки. поэтому, пожалуйста, измените его только с результатами, а затем проверьте.

Надеюсь, что это поможет!

+0

Попытка этого решения была неудачной.Кроме того, это не кажется проблемой при инициализации результатов статически, а не при использовании GET. –

Смежные вопросы