Задать вопрос
Ответы пользователя по тегу Angular
  • Как при вызове компонента angular 6 в теге отрисовать его в теге body?

    @Pantene742
    <тег-не-боди>
    <селектор-компонента>селектор-компонента>
    тег-не-боди>

    В Ангулар все помещается в Боди. Твой апп компонент загружается в него. дальше все вложенные компоненты вложенные в App будут в Боди.
    Ответ написан
  • Как вызвать метод компонента из другого компонента?

    @Pantene742
    Subject или Через Redux если используется ngrx. Еще если компоненты грузятся через контейнер. то вместо компонент оутлет можно сделать референцию

    В компоненте :

    component: any;
    
    @ViewChild('mainContent', { read: ViewContainerRef })
      mainContent: ViewContainerRef;


    загрузить компонент в контейнер как через оутлет в коде компонента:
    this.mainContent.createComponent(this.cF.resolveComponentFactory(Название компонента из переменной как для компонент оутлета тип -> ComponentRef);

    в переменную копонент заносим данны компонент:
    this.component = this.mainContent.createComponent(this.cF.resolveComponentFactory(Название компонента из переменной как для компонент оутлета тип -> ComponentRef);


    Даллее.....this.component.instance.MethodFromComponent() И нам будут доступны все свойства и методы в загруженые в контейнер. Также методы могут быть async и вызывать их надо
    await this.component.instance.MethodFromComponent()
    Но такой способ нам понадобился по той причине что каждый компонент загруженный в контейнер имел методы с одинаковым названием. В родителе стелки назад - вперед. И мы как бы в текущем дочернем понимали юзер хочет вернутся назад или пойти дальше, если при вызове возращался фолс мы не пускали назад или вперед не переключали на новый компонент. В дочерних были onGoBack и onGoNext и если на goNext форма оказывается не валидной вывод ошибки и возращение false и родитель знает что не надо переключать на следующий.

    Еще вариант из стаковерфлоу.
    Когда не используется загрузка компонента через отлет в контейнер а метод вставляется в родителя хардкодом.
    @Component({
      selector: 'child-cmp',
      template: '<p>child</p>'
    })
    class ChildCmp {
      doSomething() {}
    }
    @Component({
      selector: 'some-cmp',
      template: '<child-cmp #child></child-cmp>',
      directives: [ChildCmp]
    })
    class SomeCmp {
      @ViewChild('child') child:ChildCmp;
      ngAfterViewInit() {
        // child is set
        this.child.doSomething();
      }
    }


    Из чайлда в парент луше всего стукать через оутпут. И такое нереально чтоб чайлд знал методы парента(как выше) так как чайлды для повторного использования. (Костыль во всех случаях) Да и то что више также костыль. Для масимальной читаемости проекта Redux или Subject. Так же где логично Input Output.
    Ответ написан
    Комментировать
  • Как менять два компонента в зависимости от маршрута в Angular 2+?

    @Pantene742
    Их обоих вставь в родителя. и по роуту сови родителя.
    Ответ написан
  • Как правильно создать package.json c Angular 5?

    @Pantene742
    Используй также npm i name_of_package -D или там --dev Для того чтоб загруженый пакет загружался
    в package json. к стати в Angular компилятор Sass встроенный. главное при создании проэкта написать
    --style=sass и при этом в проэкте можно использовать css и sass тоесть одному компоненту sass другому css.

    А еще в Angular тебе не надо никаких еще сборщиков. там webpack автоматический компилирует если sass, автопрефиксит и это все сливает в единый бандл. Ангуларчик 5 кардинально отличается от того что был в первом поколении. там надо было ему помагать Гальпом, особенно когда разделял компонент на стили и шаблон (в отдельные файлы). теперь все автоматический. почитай книгу об ангуларе на русском. Это такая штуковина что без пред ознакомления просто запаришься.
    Ответ написан