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

    @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.
    Ответ написан
    Комментировать
  • Что значит данная конструкция (function () {})()?

    @Pantene742
    Стоит отметить что в ней this глобальный тоесть window. Если хотите в ней иметь локальную область видимости то передавайте в нее параметр this/ кажись так ... function(this){}(this) обявляем принимаемый и дальше передаем то который в нашей области видимости.

    Данная функция помагает изолировать код в своей области видимости.
    1. она сама срабатывает(все что в ней как код словно в js файле не в функции)
    2. В ней глобальная область видимости.

    Сначала мы подключаем библиотеку и заносим ее в переменную
    Эту переменную называем уникально а в обьявлении функции пишем $, так как нашим jQuery плагинам надо именно такое название переменной. Теперь У нас в каждой такой функции погут использоваться различные версии jQuery и каждый код (ваш код или плагин) в это функции использует обычное название переменной - '$' в которой jQuery.

    var jq14 = jQuery.noConflict(true);   // заносим подключенную либу в переменную
    
    (function ($) {   // функция принимает $ для корректной работы jQuery плагинов или вашего кода
        $(document).ready(function () {
            // your logic
        });
    }(jq14));  // передаем уникальное название из внейшней среды
    Ответ написан
    Комментировать
  • PHP+JS. Можно ли вернуть переменную из JS в PHP внутри одного скрипта?

    @Pantene742
    PHP Работает в паре с Apache и Apache ждет пока php сгенерирует целеком страницу для отправки ее на сервер.
    и вообще генерировать JS код при помощи PHP Возращать его в страницу в echo это крайне тупой костыль.
    Если тебе надо обменивать данными клиентское приложение из сервером для этого есть Ajax. Это когда какая та часть кода на странице делает запрос на сервер и запрашивает уже не целую страницу а данные и также может из отправлять в запросе. Читайте о протоколе http, о принципах работы php.
    Ответ написан
    Комментировать
  • Система тестирования на Javascript + Node.JS+MongoDB?

    @Pantene742
    На фронтенд e2e, бекенд e2e. И GUI тест на Selenium.
    Ответ написан
    Комментировать