• Как правильно передавать данные через сервис Angular?

    search
    @search
    мама говорит что я особенный
    Для вашего случая существует лучшая практика: так называемые умные и глупые компоненты: https://medium.com/@dan_abramov/smart-and-dumb-com... (это оригинальная статья от автора реакта, но в ангуляре принципы такие же)

    В нашем случае компоненты search и result - глупые компоненты, которые только и делают, что возвращают строку ввода (search) и отображают данные (result). Так же у нас имеется умный компонент searchResults, который знает как отреагировать на данные из search и правильно отобразить result.

    Search и Result ничего не должны знать об HttpService. Он в них не инжектится.

    SearchComponent:

    import { Component, EventEmitter, Output } from '@angular/core';
    
    @Component({
        selector: 'search',
        templateUrl: './result.component.html',
        styleUrls: ['./result.component.scss']
    })
    export class SearchComponent {
    
        public query: string;
    
        @Output() onQuery: EventEmitter<string> = new EventEmitter();
    
        constructor() {}
    
        public handlerEnterSearch() {
            this.onQuery.emit(this.query)
        }
    }


    search.html:

    <div class="input-group input-group-lg p-5">
        <input
            [(ngModel)]="query"
            type="text"
            class="form-control"
            placeholder="Что ищем?"
            (keyup.enter)="handlerEnterSearch()"
        >
        <div class="input-group-append">
            <button class="btn btn-primary" type="button" (click)="handlerEnterSearch()">Найти фильм</button>
        </div>
    </div>


    result.component.ts

    import { Component, OnInit, Input } from '@angular/core';
    import { HttpService } from '../http.service'
    
    @Component({
      selector: 'result',
      templateUrl: './result.component.html',
      styleUrls: ['./result.component.scss']
    })
    export class ResultComponent implements OnInit {
    
      // Вот эти items выводятся в html результата
      @Input()
      items: any[];
    
      constructor(){}
    }


    search-result.html:

    <search (onQuery)="doSearch($event)">
    <result [items]="result">


    search-result.component.ts:

    import { Component, OnInit } from '@angular/core';
    import { HttpService } from '../http.service'
    
    @Component({
        selector: 'search-result',
        templateUrl: './search-result.component.html',
        styleUrls: ['./search-result.component.scss']
    })
    export class SearchResultComponent implements OnInit {
    
        items:any[];
    
        constructor(private httpService: HttpService){
    
        }
    
        // Вот это неудачная часть. Её можно сделать веселее, но для этого необходимо понимать как устроен RxJS.
        // Я не знаю как это объяснить без написания отдельной статьи.
        // На первое время такой подход сойдёт.
        doSearch(query: string) {
            this.httpService.getFilms(query).subscribe((items) => {
              this.items = items;
            })
        }
    }


    Использование сервисов для передачи данных между компонентами в ангуляре - это самые распространённые грабли во фреймворке. Причём эти грабли настолько хитрые, что большинство программистов даже не понимает что ходит по ним. Самый верный способ не наступать на грабли - это забыть навсегда про private и public переменные в сервисах (другими словами сервис не должен иметь состояние). Без этого можно жить и причём легко и спокойно если начать использовать NxRx для хранения состояния системы.
    Ответ написан
    2 комментария
  • Как правильно писать приложение на Angular?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    1. Очень большие, практически любые.
    2. В верстке нужно использовать компонентный подход.

    Angular проект следует с нуля начинать на angular-cli. Советую вам сделать перерыв для изучения фреймворка, а потом писать код.
    У Angular достаточно высокий уровень входа, поэтому рекомендую изучить архитектуру и до конца разобраться как он работает.
    Ответ написан
    1 комментарий
  • Почему свойство background "затмевает" свойство background-color?

    background: -webkit-linear-gradient(bottom, #87C03B, #98D647);


    такую запись браузер читает как

    background-image: -webkit-linear-gradient(bottom, #87C03B, #98D647);


    background-color меняетcя, но под градиентом этого не видно. Можете проверить, поставив один из цветов в transparent;
    Ответ написан
    1 комментарий
  • Только начал учить javascript как понять?

    EreminD
    @EreminD
    Кое-что умею
    //javascript такой: хоба! Функция, которая принимает на вход один параметр 
    //и возвращает результат в виде х*х.
    //Пожалуй, я ее запомню, потом, может, пригодится
    var square = function(x) { return x*x; }; 
    
    //потом javascript такой: ага, надо че т в консоль вывести (то, что в скобках). 
    //А че в скобках? Итить-мадрить, это ж та самая функция, котораю я прост запомнил. 
    //Надо ее вызвать и на вход подать 12. Тогда мне вернется 12*12 и это я выведу в консоль.
    console.log(square(12));
    
    //огонь


    А если понятнее, то вот
    Ответ написан
    7 комментариев
  • Как удалить лишние селекторы CSS?

    intellij IDEA умеет хорошо это делать, а еще оптимизирует эти самые стили.
    Нужно выбрать пункт Analyze -> inspect Code на анализируемом документе и тебе выдаст все косяки, где можно автоматически сделать БА-БАХ!!!! лишних селекторов.
    Ответ написан
    1 комментарий