• Как исправить ошибки в консоли от javascript?

    @kttotto
    пофиг на чем писать
    У Вас бесконечный цикл, нет условия проверки значения i, индекс выходит за пределы размера массива aboutSliderItem и там соответственно нет тех свойств, которые Вы хотите прочитать. Подозреваю, что нужно
    for (let i = 0; i < aboutSliderItem.length; i++)
    Ответ написан
    1 комментарий
  • Какую программу использовать для дизайна кухни для себя?

    @kttotto
    пофиг на чем писать
    В инете полно бесплатных. Когда себе кухню делал пол года назад, прежде чем к дизайнеру идти, себе сделал пару примеров, чтобы понимать визуально что и как влазит. Я тогда просто по поиску перепробовал тройку онлайн редакторов и на одном остановился. Сейчас не вспомню какой именно. Если Вам разово, то и сильно заморачиваться поиском не стоит, дольше искать будете, чем рисовать.

    Советую дизайнером не пренебрегать, всетаки знаний материала и некоторых нюансов (особенно если у Вас газ) у них побольше. И ни один дизайнер с ходу Вам ничего не предложит. Мы неделю кухню только рисовали, обсуждали, прежде чем перейти к выбору материала.
    Ответ написан
    Комментировать
  • Angular. Как правильно отобразить один json объект в представлении?

    @kttotto
    пофиг на чем писать
    <div *ngIf="item | async as any">
      id: {{item.id }} name: {{ item.name }} 
    </div>
    Ответ написан
    Комментировать
  • Почему рекурсия начинает идти в обратную сторону?

    @kttotto
    пофиг на чем писать
    1.  function getFactorial(num) {
    2.    console.log(num)
    3.    if (num <= 1) {
    4.      return
    5.    } else {
    6.      getFactorial(num - 1)
    7.      console.log(num)
    8.      return
    9.    }
    10. }
    11.
    12. getFactorial(4)


    Что такое стек знаете? В рекурсии вызовы будут в виде стека, последним пришел - первым вышел.

    1. Вызов getFactorial(4), отработает строка 2, покажет '4'
    2. На строке 6 вызов getFactorial(3), отработает строка 2, покажет '3'
    3. На строке 6 вызов getFactorial(2), отработает строка 2, покажет '2'
    4. На строке 6 вызов getFactorial(1), отработает строка 2, покажет '1'
    5. Выход из функции getFactorial(1), отработает строка 4
    6. Продолжится выполнение функции getFactorial(2), отработает строка 7, покажет '2'
    7. Выход из функции getFactorial(2), отработает строка 8
    8. Продолжится выполнение функции getFactorial(3), отработает строка 7, покажет '3'
    9. Выход из функции getFactorial(3), отработает строка 8
    10. Продолжится выполнение функции getFactorial(4), отработает строка 7, покажет '4'
    11. Выход из функции getFactorial(4), отработает строка 8
    Ответ написан
    2 комментария
  • Property 'createMessageComponentCollector' does not exist on type 'TextChannel'. Как исправить?

    @kttotto
    пофиг на чем писать
    Вы бы показали сам тип Message. Я так понимаю он имеет метод createMessageComponentCollector().
    Вся штука в том, что await message.reply() возвращает не тип Message, поэтому он этот метод найти и не может. Точнее имена полей и их типы могут совпадать, а вот метода не будет, он с сервера не приходит.
    Поэтому, в этом случае, думаю нужно создать экземпляр руками, а потом смапить поля. Что-то типа этого
    reply = await message.reply();
    const message = new Message();
    message.property1 = reply.property1;
    message.property2 = reply.property2;
    ...
    message.createMessageComponentCollector();
    Ответ написан
  • Как типизировать огромный объект в typescript?

    @kttotto
    пофиг на чем писать
    Декомпозировать или словарь.
    Ответ написан
    Комментировать
  • Как решить ошибку undefined' is not assignable to type 'CdkTableDataSourceInput' и почему она возникла?

    @kttotto
    пофиг на чем писать
    В ошибке все написано: тип MatTableDataSource не соответствует типу CdkTableDataSourceInput. Видимо Вы пытаетесь передать в компонент поле типа MatTableDataSource, это Ваш dataSource, а он ожидается параметр типа CdkTableDataSourceInput.
    Ответ написан
  • Как вывести данные на API Яндекс Карт?

    @kttotto
    пофиг на чем писать
    1. Разобраться с API яндекс карт, например здесь. Прочитать документацию и разобрать примеры.
    2. Реализовать сервис для этого API с методами, например, showOnMap(offers).
    3. Добавить контейнер в компонент для карты и сделать привязку с сервисом.
    Ответ написан
    Комментировать
  • Существует ли JavaScript-фреймворк для фронт-енда, бек-енда и SSR, который реально простой и удобный?

    @kttotto
    пофиг на чем писать
    Никто Вам здесь не назовет такой фреймворк.

    Вы хотите практически готовый продукт под Вашу постановку. Но так бывает с тем же шансом, что попасть в зеро в рулетке. Именно поэтому и нужны разработчики. И сдается мне, что большинство Ваши требований от непонимания как это приготовить самостоятельно.

    Когда-то на заре своей рабочей деятельности, я, такой молодой и крутой пришел на первую работу. Посмотрел на кусок кода и сказал "Что за говно? Я напишу лучше.". Промудохавшись целый день, к вечеру, я вдруг понял, что у меня получилось практически тоже самое. Это было мне уроком, доверять чужому коду и что с такими оценками в дураках могу оказаться я. А позже я стал замечать, что критики всего и вся по большей части люди с низкой компетенцией, не понимающие, как это работает внутри.

    1. Сравните их опыт и свой, их компетенцию и свою. Может в этом дело?
    2. Он не обязан это делать. Кроме того, очень мало кого заинтересует сразу все из коробки и еще в такм виде как именно Вам нужно.
    3. Не понимаю проблемы, все решаемо, просто Вы зациклились на каком-то своем решении, поэтому не видите других.
    4. Это опять "Хочу все и сразу и так как мне это надо". Сервис, это не обязательно именно бэк вэба, не все хотят делать сервисы в монолите web api.
    5. Это решаемо руками и недолго, зачем это делать из коробки?
    6. Оценка "нормальный" очень субьективна.
    7. Это решаемо. Думаю Вы не разобрались или хотите решить каким-то особым способом. Не все решается одинакого.
    Ответ написан
    1 комментарий
  • Почему Angular CDK при возвращении назад через браузер убирает query параметры?

    @kttotto
    пофиг на чем писать
    Вы лучше показали бы код роутинга и как вызывается метод open, точнее, как обрабатываются параметры url.

    Возможно это связано с настройкой роутера, например, нет настройки для страницы с параметром, он переходит на основную, дальше внутри компонента видимо есть subscribe на route и уже там обрабатываются параметры url, происходит navigate, открытие модалки. Предполагаю, что нужно просто добавить роут с параметром, а остальную логику возможно менять не придется.

    Но так же возможно где-то есть этот лишний navigate. В общем нужно другой код смотреть, нет смысла смотреть как открывается модалка, нужно смотреть как обрабатываются переходы.
    Ответ написан
  • Почему не работает удаление элемента из массива?

    @kttotto
    пофиг на чем писать
    Ошибка в логике метода showElement.

    Вы добавляете id всегда в конец списка, а удаляете id по индексу положения div в списке, хотя не факт, что id именно в этом месте будет.

    Например, кликнули по 3-му элементу, потом по второму, будет selectedElArr = [2, 1], потом кликаете по 3-ему, чтобы его закрыть и метод захочет удалить selectedElArr[2], а такого элемента даже нет. Ну и т.д.

    Логичнее добавлять selectedElArr[index]=true и удалять selectedElArr[index]=false, если опираться на порядок div в списке. Ну и проверять потом так же
    if (!!this.selectedElArr[index]) {
     this.selectedElArr[index] = false;
    } else {
     this.selectedElArr[index] = true;
    }}

    Ну или одной строкой

    this.selectedElArr[index] = !this.selectedElArr[index];

    Если не опираться, то я бы добавил поле data.isOpened (isActive, isVisible и т.д.) и уже отталкивался от него, это мне кажется надежнее.
    Ответ написан
    Комментировать
  • Как получить сразу 2 объекта api?

    @kttotto
    пофиг на чем писать
    (data: any) => ((this.albums = data.albums), (this.menu = data.menu)),

    Что за странный синтаксис, что Вы этим хотите?
    Почему не написать обычно?
    (data: any) => {
        this.albums = data.albums;
        this.menu = data.menu;
    }

    public ngOnInit(): void {
    this.getQueryParams();
    this. findAll();
    }

    И, кстати, это не совсем верно. Метод findAll зависит от this.params который инициализируется в getQueryParams. А findAll начнет выполняться раньше, чем выполнится getQueryParams.
    Их нужно запихнуть в pipe
    this.route.queryParams
        .pipe(
            mergeMap((params: Params) => {
                this.params = {
                    skip: params['skip'],
                    take: params['take'],
                };
                return this.albumService.findAll(this.params)
            ),
            tap((data: any) => {
                this.albums = data.albums;
                this.menu = data.menu;
            }),
            catchError(error => {
                this.error = error.message;
                console.error(error);
                return EMPTY;
            })
        })
        .subscribe();
    Ответ написан
    1 комментарий
  • Как подписаться на изменение переменной и выполнить вызов функции один раз для последнего элемента?

    @kttotto
    пофиг на чем писать
    Зависит от того, что такое "последний клик" и как Вы определяете, что он последний. Если имеете в виду, что можно быстро кликнуть несколько раз по элементу и на каждый клик срабатывает отправка, а надо, чтобы только один раз, после "последнего клика в группе быстрых кликов", то для этого есть оператор https://rxjs.dev/api/operators/debounce. Событие пройдет только когда после клика пройдет заданное время. Например, это используется при наборе в поисковой строке: нам не нужен запрос на ввод каждой буквы (а набирают быстро), будет выжидаться пауза между набором символов, как только она появится, произойдет запрос.
    Ответ написан
    3 комментария
  • Отслеживание изменений в сервисе Angular?

    @kttotto
    пофиг на чем писать
    Непонятен вопрос. Подпишитесь на изменение данных и измените данные в другом.
    <mat-slider (ngModelChange)="helpersService.slideValue1$.next(Number($event))"
                [ngModel]="helpersService.slideValue1$.value"
                min="0"
                max="100"></mat-slider>
    
    
    ngOnInit(): void {
        this.helpersService.slideValue1$
            .pipe(
                takeUntil(this.destroy$),
                tap(value => {
                    this.helpersService.slideValue2$.next(value);
                )
            )
            .subscribe();
    };
    
    // или с методом
    updateSliderValue(event: MatSliderChange){
        this.helpersService.slideValue1$.next(Number(event));
    }
    Ответ написан
    1 комментарий
  • Как правильно позиционировать?

    @kttotto
    пофиг на чем писать
    display: inline-block для каждого контейнера с текстом и картинкой или display: flex для всего контейнера с текстом и картинкой
    Ответ написан
    Комментировать
  • Как открыть вторую гит ветку в новом окне?

    @kttotto
    пофиг на чем писать
    Склонировать проект в другу папку и открывать в ide от туда.
    Ответ написан
    6 комментариев
  • Как решить проблему при сборке проекта Angular?

    @kttotto
    пофиг на чем писать
    В сообщении все написано
    ERROR TypeError: Cannot set properties of null (setting 'statusCode')

    Не может проинициализировать поле, т.к. оно null

    this.response наверняка undefined или null во время открытия компонента.
    Добавь проверку
    if (!!this.response) {
      this.response.statusCode = 404;
      this.response.statusMessage = '404 - Page Not Found';
    }
    Ответ написан
    Комментировать
  • Как ограничить кол-во вводимых символов в ReadLine()?

    @kttotto
    пофиг на чем писать
    При данных условиях, подозреваю, что никак. ReadLine просто считывает всю строку целиком из буфера, дополнительных параметров для ограничения не имеет.
    А так сама постановка задачи подразумевает цикл и проверку длины на каждом цикле.
    Ответ написан
    Комментировать
  • Зачем .Net разработчику нужны отличные знания JavaScript?

    @kttotto
    пофиг на чем писать
    Если идете в веб, то без базовых знаний фронта полноценно решать задачи даже бэка не получится. На каком то уровне знать что там происходит и как работает - нужно. Может Вам и не придется решать конкретно фронтедные задачи, но читать код и что-то с чем-то согласовывать - придется.

    А так , да. Чистый бэкендщик сейчас мало кому нужен. Не ради экономии денег, ради экономии времени, чтобы не буцать и не блокировать задачи. Дали задачу реализовать часть отображения данных, делаешь бэк для получения данных и сам же делаешь отображение. Не нужно тратиться на согласовывание между двумя и фронту ждать, когда бэк что сделает, а потом, если что-то не так, опять возвращать на бэк и т.д.
    Ответ написан
    Комментировать
  • Как добавить или пробросить событие focus() на кастомный дочерний компонент в Angular?

    @kttotto
    пофиг на чем писать
    Создать в дочернем компоненте метод, который будет делать фокус. А из родителя этот метод дергать как this.myCustomButton.focus()
    Ответ написан
    3 комментария