Ответы пользователя по тегу Angular
  • Изучение (моё) AngularJS на примере?

    Razbezhkin
    @Razbezhkin Автор вопроса
    программист, преподаватель
    Вот, собственно, созрел еще один вопрос.
    как лучше всего (правильнее с идеологической точки зрения) в ячейки вставлять html элементы управления в зависимости от типа.
    варианты содержимого следующие:
    ссылка «записаться»
    текст «занято» на желтом фоне
    текст «занято» на красном фоне
    текст «вы записаны — не подтверждено», ссылка «выписаться»
    текст «вы записаны — подтверждено», ссылка «выписаться»

    Я попробовал сделать это через compile. но пока ничего не получилось:

    <td ng-repeat="day in days"><div compile="showreserv(room,day)"></div></td>
    


    Подскажите, пожалуйста, куда копать.
    Ответ написан
    Комментировать
  • Изучение (моё) AngularJS на примере?

    Razbezhkin
    @Razbezhkin Автор вопроса
    программист, преподаватель
    Я немного продвинулся в своем изучении.
    Если структура данных о резервировании содержит объекты, в которых есть поле id — которое обозначает номер помещения и date — которое обозначает дату, то привязку к ячейкам можно сделать следующим образом:

    В javascript'е вставить следующий код:

    $scope.showreserv = function (room, day) {
                var x = $filter('filter')($scope.reservs, { id: room.id, date: day });
    
                if (x.length > 0) return x[0].type;
                else return "-";
            }
    
    


    а в html'е следующий:

    <tr ng-repeat="room in stores|orderBy:'name'">
    <td ng-click="test(room)">{{room.id}} {{room.name}}</td>
    <td ng-repeat="day in days">{{showreserv(room,day)}}</td>
    </tr>
    


    коллекция stores содержит информацию о пемещениях, поле id — идентификатор, name — название
    коллекция days — содержит дни, начиная с сегодня. (в массиве содержатся целые числа timestamp)
    вот этот кусок html кода

    <td ng-repeat="day in days">{{showreserv(room,day)}}</td>
    


    повторяется для каждого помещения и дня и при каждой привязке вызывается функция showreserv. Ее код — выше.

    фильтрация — обалденная штука (хотя додумался как с ней работать не сразу)

    var x = $filter('filter')($scope.reservs, { id: room.id, date: day });
    


    здесь $scope.reservs — массив всех резервирований.
    а { id: room.id, date: day } — обозначает что в результате должны остаться только те элементы, у который поля id и date соответствуют входным параметрам функции привязки.

    тут у меня был один ньюанс: фильтр не работал, пока дата в коллекциях была представлена объектом Date. видимо, разные экземпляры не сравнивались. когда вместо объектов Date я стал использовать целое число timestamp — все встело на свои места.

    Теперь мне нужно сделать следующие вещи:
    1. отображать в ячейках таблицы разные шаблоны для каждого значения типа резервирования и при отсутствии резервирования.
    2. привязать к ячейкам обработчик клика
    3. сделать так, чтобы данные отправлялись на сервер.
    Ответ написан