2016-01-15 4 views
0

Я использую службу backemnd (разбор в этом случае, но это не имеет особого значения для этого вопроса) и хотел просто найти его. У меня есть текстовое поле, которое при вводе текста ищет сервер и возвращает массив совпадений.Ионный, список, населяющий через поиск

Мой следующий шаг - просто отобразить мои возвращенные объекты в списке. Достаточно просто с ng-repeat, но поскольку представление уже загружено, пользовательский интерфейс не будет обновляться, чтобы отражать массив, загружаемый в список. Имеет ли это смысл?

Мне было интересно, есть ли техника, чтобы обновить список и показать возвращаемые элементы поиска, и, надеюсь, я не жажду здесь, но делаю это так, чтобы это выглядело хорошо и не было неуклюжим.

Я много прибегая к помощи не повезло :(любой совет будет удивительно.

+0

класть какой-нибудь код ..! Какой hav u осуществлен .. ?? –

+0

Если я получаю это правильно, и потому, что вы упомянули Ionic, я считаю, что вы используете угловые. поэтому вы можете сохранить свой список в двух направлениях привязанным к массиву в своей области, этот массив сначала будет пустым. После того как вы вернете результаты из сервиса, нажмите результаты в массив, и ваш список должен обновиться как его двусторонняя привязка. – kkap

+0

Я использую угловой! установлено угловое значение для автоматического обновления? потому что в моем случае .. он не обновляет html-часть его .. он выглядит так же, как и его начальный запуск –

ответ

0

без какой-либо код при условии, что трудно догадаться, что это неправильно. Угловое имеет двухстороннее связывание, поэтому вид должен быть обновлен автоматически после изменения содержимого массива. Если это не так, то это означает, что вы, вероятно, сделал что-то неправильно в вашем коде. Представляю пример кода, который должен работать в этом случае.

контроллер

angular.module('moduleName') 
    .controller('ViewController', ['ViewService', ViewController]); 

function ViewController(ViewService) { 
    var self = this; 

    self.arrayWithData = []; 
    self.searchText = ""; 

    // ---- Public functions ---- 

    self.searchData = searchData; 

    // Function which loads data from service 
    function searchData(searchText) { 
     ViewService.getData(searchText).then(function(dataResponse) { 

      // Clear the array with data 
      self.arrayWithData.splice(0); 

      // Fill it again with new data from response 
      angular.forEach(dataResponse, function(item) { 
       self.arrayWithData.push(item); 
      }); 
     }); 
    } 

    // --- Private functions --- 

    // Controller initialization 
    function _initialize() { 
     self.searchData(self.searchText); 
    } 

    _initialize(); 
} 

Просмотр

<div ng-controller="ViewController as view"> 
    <input type="text" ng-model="view.searchText" /> 
    <input type="button" value="Search!" ng-click="view.searchData(view.searchText)" /> 

    <!-- A simple ngRepeat --> 
    <div ng-repeat="item in view.arrayWithData"> 
     <!-- Do what you want with the item --> 
    </div> 
</div> 

Заключение

С помощью сращивания() и толчок() вы убедитесь, что ссылка на ваш массив не изменяется. Если вы используете синтаксис controllerAs (как в примере), назначение новых данных с помощью «=», вероятно, будет работать. Однако, если вы используете $ scope для хранения своих данных в контроллере, потеря ссылки на массив является наиболее вероятной причиной, почему ваш код не работает.

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