Ответы пользователя по тегу Angular
  • Как лучше выполнить объединение (merge) запросов по условию?

    @msdosx86
    this.postService.getPostByName(name)
      .pipe(
        switchMap(post => this.postService.getTagsByPostId(post.id)
          .pipe(
            tap(tags => post.tags = tags),
            mapTo(post),
            filter(() => post.hasComments),
            switchMap(() => this.postService.getCommentsByPostId(post.id)),
            tap(comments => post.comments = comments),
            mapTo(post),
          )
        ),
      )
    Ответ написан
  • Как импортировать scss-файл?

    @msdosx86
    Если файл у вас лежитв /styles/variables.scss, то
    @import 'src/styles/variables'
    Ответ написан
    Комментировать
  • Как построить очередвь в angular?

    @msdosx86
    Если this.createFile() возвращает observable, то
    save_custom(): Observable<void> {
      return this.createFile()
        .pipe(
          tap(() => this.save_order()),
        );


    Если у вас там всё на промисах, то как обычно
    async save_custom(): Promise<void> {
      await this.createFile();
      return await this.save_order();
    Ответ написан
    Комментировать
  • Как загрузить компонент Angular только после выполнения запроса к серверу?

    @msdosx86
    <app-component *ngIf="show"></app-component>
    
    public show: boolean;
    this.doRequest().subscribe(() => this.show = true));
    Ответ написан
    Комментировать
  • Как связать между собой front-end и back-and(flask, angular)?

    @msdosx86
    Поднимаешь сервер на питоне на определенном порту, например 3000.
    Запускаешь ангуляр через ng serve, он тебе поднимет приложение на порту 4200.
    Делаешь все запросы на localhost:3000 и радуешься жизни.
    И не забудь cors настроить на сервере.
    Ответ написан
    Комментировать
  • Можно ли работать с DOM напрямую используя при этом Angular?

    @msdosx86
    В этом нет необходимости. Если вы хотите по клику кнопки добавлять например элемент в массив, то просто добавляйте его. Ангуляр всё за вас сделает. В этом вся суть фреймворков. Они позволяют вам думать о бизнес-логике, а не о деталях реализации.

    <div *ngFor="let item of items"> {{ item }} </div>
      <button (click)="addItem()">Add</button>


    items = [1, 2, 3, 4];
      addItem(): void {
        this.items.push(5);
      }
    Ответ написан
    Комментировать
  • Как правильно делать запросы к API в ангуляр 7?

    @msdosx86
    search(title: string): void {
      const params = new HttpParams()
        .set('api_key', 'd6a5ac2d3d7cab11a084ca8080421b20')
        .set('title', title);
      const url = 'https://api.themoviedb.org/3/movie/search';
      this.httpClient.get(url, { params })
        .subscribe(console.log);
    }


    Это ужасный, но понятный для вас пример. Вызовы к API надо выносить в сервисы, метод `subscribe` никогда не вызывайте в методах, только один раз в OnInit, а потом дергать его с помощью `.next`.
    Ответ написан
    6 комментариев
  • Как исправить срабатывание TSlint на @Input() с set / get в Angular?

    @msdosx86
    Для двустороннего связывания нужно

    @Input()
    public value: string;
    
    @Output()
    public valueChange: EventEmitter<string>;
    Ответ написан
  • Как изменить тип в TypeScript?

    @msdosx86
    a.profile = [1,2,3] as any;
    a.contact = 159 as any;
    Ответ написан
    Комментировать
  • Как включить подсветку синтаксиса в `` кавычках?

    @msdosx86
    Никак, это просто строка. Вместо template используй templateUrl и укажи путь до HTML файла и в нем пиши
    Ответ написан
    Комментировать
  • Typescript/Angular: что не так с возвратом результата асинхронной функции?

    @msdosx86
    В сервисе
    constructor (private http: HttpClient) {}

    public getAll() {
    return this.http.get('url').pipe(map(res => res.data));

    В компоненте
    this.roomService.getAll().subscribe(data => this.rooms = data)

    Сори, с телефона пишу
    Ответ написан
    Комментировать
  • Как передать в компонент значение только одного текстового поля из группы?

    @msdosx86
    Непонятно, зачем вам из нескольких инпутов менять одно значение, но держите
    text_val = new FormControl();
    <input  type="text" name="arr_text[]" [formControl]="text_val">
    <input  type="text" name="arr_text[]" [formControl]="text_val">
    <input  type="text" name="arr_text[]" [formControl]="text_val">
    <input  type="text" name="arr_text[]" [formControl]="text_val">


    Значение потом берете this.text_val.value
    Ответ написан
  • Как на angular 2 сделать страницу 404?

    @msdosx86
    Возможно вы не так пишете. Если для корневого роутинга добавить
    {
      path: '**',
      component: NotFoundComponent,
    }


    То это будет работать. Другое дело, если у вас есть вложенные роуты и вам в них надо такой роут добавлять.
    Ответ написан
    Комментировать
  • Как передавать данные между компонентами?

    @msdosx86
    Целый сервис ради такого простого действия городить не надо. Здесь надо использовать декораторы @Input @ Output. В products компоненте создаёте свойство @ Output public clicked = new EventEmitter(); и при клике эмитишь свои данные через this.clicked.emit(data);. Дальше в home компоненте нужно подписаться на это событие через
    <app-products (clicked)=“onClicked($event)”></app-products>
    . Создаёшь в home компоненте свойство data и присваиваешь только что пойманные данные в методе onClicked. То есть onClicked(data) { this.data = data; }.
    Дальше в компоненте wishlist создаёшь свойство @Input public data; и прокидываешь из home компонента свои данные <app-wishlist [data]=“data”></app-wishlist>. Ещё раз, сервис для такого простого действия городить не нужно.
    Ответ написан
    1 комментарий
  • Как в Anguar показывать картинки поочередно?

    @msdosx86
    Сначала можно было бы получить список id всех картинок, которые вы хотите показать. Потом поочередено делаете запрос для каждой картинки по его id.
    Ответ написан
    Комментировать
  • Переход с Angular на React. Тренд или нет?

    @msdosx86
    Реакт это библиотека, а Ангуляр - это целый фреймворк. Если вы работаете в сфере энтерпрайза, то легче выбрать ангуляр, так как в нём уже есть то, что нужно для создания архитектуры огромного веб приложения и для поддержки кода в дальнейшем. Когда же огромные приложения начинают писаться на реакте, то это выглядит как мешанина из кучи npm пакетов (тот же редакс, санки, аксиос, флоу, реакт-роутер). Не спорю, что на реакте тоже можно большие приложения создавать, но для этого потребуется больше усилий (при одинаковых знаниях фреймворков). Почему? Да потому что в ангуляре с тайпскриптом и архитектурой, которую ангуляр навязывает разработчикам, можно применять классические паттерны проектирования, которые до этого применялись в классических языках типа джавы или c#. Их в обычном js'е тоже можно применять, но толку от этого не много, так как классические паттерны завязаны на ООП и статической типизации. Зачем нужны паттерны? Для поддержания кода. У нас в компании проекты поддерживаются по несколько лет (знаю проекты, которые поддерживаются уже больше 5 лет) и на проект подключают других людей. Кого то убирают, кого то подключают. И когда нужно поддерживать код, то тут тайпскрипт и архитектура ангуляра в самый раз позволяет всё это делать безболезненно (при условии, что код пишут хорошо). Весь этот, не побоюсь слова, "высер", который написал коллега выше, в сторону ангуляра обусловлен тем, что у ангуляра порог вхождения выше, чем у остальных фреймворков. И поэтому людям кажется, что там происходит какая-то магия. И получается, что люди не понимают, что там происходит и жалуются, что слишком сложно, но зато в реакте всё просто. В реакте действльно всё намного проще. Чтобы писать на реакте вам в принципе хватит знаний es6. Чего не скажешь про ангуляр. Ибо там тайпскрипт и rxjs, который просто понять не получится, надо изрядно постараться, чтобы начать думать потоками и как с ними работать. Но когда ты начинаешь понимать как работает rxjs, как работает сам ангуляр (change detection например), то становится просто невообразимо легко писать код. Весь хейт в сторону ангуляра из-за того, что фронтенда изначально не существовало как такового. Ведь был пхп и он прекрасно работал с хтмл. Потом появились шаблонизаторы и jquery. Всё это делалось бекендерами и фронтенда как такового не было. И потом появились фреймворки типа ангуляра, которые бОльшую часть логики взяли на себя и бекенд превратился в REST API. Фронтенд не был сложным, Ангуляр значительную часть логики взял на себя и тем самым усложнил фронтенд, поэтому те, кто привыкли формочки верстать, не могут осилить эти тонны абстракций. На каком нибудь фрилансе или средних проектах нет смысла в ангуляре, поэтому там и используются реакт и вью, ну и жиквери, куда ж без него. А если проект уровня 50-100К долларов, то тут ни о каких жиквери речи нет.
    Ответ написан
    4 комментария
  • Как назначить тип для Observable в Angular 6/Rxjs 6?

    @msdosx86
    Тут явно проблема в импорте Observable'a
    Ответ написан
    Комментировать
  • Как решить ошибку TypeScript?

    @msdosx86
    Вам компилятор уже показывает ошибку, а вы прочитать не можете
    Ответ написан
  • Как переписать Http на HttpClient?

    @msdosx86
    1) переименовываем Http в HttpClient (из angular/core, а то иногда с селениума можно импортировать случайно)
    2) в корневом модуле импортируем imports: [ HttpClientModule ]
    3) убираем все response.json() из всех методов, так как это автоматически делает HttpClient
    Ответ написан
    Комментировать
  • Почему не создается новый проект Angular?

    @msdosx86
    1) Устанавливаешь нормальную версию ноды 8+ и npm 6+
    2) sudo npm install -g @angular/cli
    3) ng new test не получится, так как ангуляр не позволяет создать проект с таким названием, поэтому
    4) ng new my-test
    Ответ написан
    Комментировать