Собственное отображение результатов поиска

Open in CodeSandbox

В данном примере показано, как задать собственное отображение результатов поиска.

Выбранные результаты добавляются в коллекцию GeoObjectCollection, на которой слушается событие "click". При клике по найденному объекту его метка становится красной.

Также для объектов коллекции задан собственный макет всплывающей подсказки.

<!DOCTYPE html>
<html>
    <head>
        <title>Собственное отображение результатов поиска</title>
        <meta
            http-equiv="Content-Type"
            content="text/html; charset=utf-8"
        />
        <!--
        Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
        Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
    -->
        <script
            src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=<ваш API-ключ>"
            type="text/javascript"
        ></script>
        <script
            src="custom_search_results.js"
            type="text/javascript"
        ></script>
        <style>
            html,
            body,
            #map {
                width: 100%;
                height: 100%;
                padding: 0;
                margin: 0;
            }
        </style>
    </head>
    <body>
        <div id="map"></div>
    </body>
</html>
ymaps.ready(function () {
    var myMap = new ymaps.Map("map", {
            center: [59.22, 39.89],
            zoom: 12,
            controls: [],
        }),
        // Создаем экземпляр класса ymaps.control.SearchControl
        mySearchControl = new ymaps.control.SearchControl({
            options: {
                noPlacemark: true,
            },
        }),
        // Результаты поиска будем помещать в коллекцию.
        mySearchResults = new ymaps.GeoObjectCollection(null, {
            hintContentLayout:
                ymaps.templateLayoutFactory.createClass(
                    "$[properties.name]"
                ),
        });
    myMap.controls.add(mySearchControl);
    myMap.geoObjects.add(mySearchResults);
    // При клике по найденному объекту метка становится красной.
    mySearchResults.events.add("click", function (e) {
        e.get("target").options.set("preset", "islands#redIcon");
    });
    // Выбранный результат помещаем в коллекцию.
    mySearchControl.events
        .add("resultselect", function (e) {
            var index = e.get("index");
            mySearchControl.getResult(index).then(function (res) {
                mySearchResults.add(res);
            });
        })
        .add("submit", function () {
            mySearchResults.removeAll();
        });
});