Задать вопрос
  • Как перевести дробное число в строку с сохранением нулей в конце (JS)?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    ...продолжая из комментов:
    Grione, эти данные приходят как?
    В json?
    Тогда единственный разумный вариант - пусть бэк переделывает и отправляет сразу строку.

    В каком-то своём формате?
    Тогда сам читай его сразу как строку.

    В json, но надо обязательно на фронте?(на самом деле не бывает таких ситуаций, бывает мало вони и эскалации)
    Пили мега-костыль: бери готовую кастомную библиотеку для парсинга json, форкай её, вноси нужные изменения и используй для этих данных.
    Ну или, если совсем всё плохо, и ты знаешь как точно будут выглядеть приходящие данные, то можно регуляркой заменить перед парсингом:
    function monkeyParse(responseText) {
      responseText = responseText
        .replace(/("field-name"\s*:\s*)(\d(?:\.\d+)?)/g, '$1"$2"');
      return JSON.parse(responseText);
    }
    monkeyParse('{ "field-name": 1.1000 }'); // { "field-name": "1.1000" }

    Но это совсем уж небезопасная какашка.:)
    Ответ написан
    1 комментарий
  • Возможно ли подключить к Vue стороний бандл с jquery?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Можно, просто вызывай свой init в mounted. Но нюансов множество.
    Ответ написан
  • Как удалять теги из массива, которые уже не используются?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    В таком виде оптимально это никак не сделать, только с полным перебором записей каждый божий раз, как предлагает 0xD34F.

    Оптимальнее же сделать можно изменив структуру на:
    {
      "tags": {
        "юр": 2,
        "зозпп": 1,
        "файл": 1,
        "пароль": 1,
        "сервер": 1
      },
      "data": [
        {
          "title": "заголовок 1",
          "content": "запись 1",
          "tags": [
            "юр",
            "зозпп"
          ]
        },
        {
          "title": "заголовок 2",
          "content": "запись 2",
          "tags": [
            "юр"
          ]
        },
        {
          "title": "заголовок 3",
          "content": "запись 3",
          "tags": [
            "файл",
            "пароль",
            "сервер"
          ]
        }
      ]
    }

    Тогда при добавлении записи просто плюсуете количество использований тэга, при удалении минусуете. Если стало 0 - удаляете.

    Хотя, конечно, если всё это на простых файликах и всё равно грузится в память - смысла слишком оптимизировать тут никакого нет.:)
    Ответ написан
    Комментировать
  • Как эмулировать клик по кнопке?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    function findLink(text) {
      for (const a of document.querySelectorAll('.amt-link > a:not(._lock-time)')) {
        if (a.textContent.trim() === text)
          return a.href;
      }
      return '';
    }
    findLink("Ярость богов")
    Ответ написан
    6 комментариев
  • Как перехватить перезагрузку страницы средствами JavaScript во Vue.js 3?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Никак. Пользователь сам решает, что ему делать.
    Ты можешь только запилить большую красивую кнопку "Обновить", чтоб ему захотелось нажать на неё, а не на стандартную.:)
    Ответ написан
  • Стоит ли учить только composition api?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Вопрос мутный как и весь vue 3. :)
    Если в React можно однозначно сказать ДА, с Vue, увы, так не получится, потому что много народу не отказалось и отказываться от options api не будет.

    Почему так? А потому, что в отличие от React - в vue options api на порядок удобнее и проще как в освоении так и в применении(особенно с классовыми компонентами), при том не имеет никаких действительно критических недостатков.
    Composition api же тут решают "проблему" которая и не встретится 99% пользователей(собственно завозит сложную перекрёстную композицию кусочков компонентов), при этом привносит кучу излишней сложности и микроконтроля(а также мерзкий синтаксис).

    Официальная позиция: composition api - будущее, всё остальное фигня. Большинство библиотек также ориентируется на composition api. На практике же этого будущего можно и не дождаться.:)

    В общем учи всё, благо более-менее просто.
    Ответ написан
    4 комментария
  • Как правильно хранить тексты постов в БД?

    Aetae
    @Aetae
    Тлен
    Ну какбэ есть всего два подхода:
    1. Свой формат: классика типа bb-тегов или даже тупо markdown. Формат строгий а потому никаких проблем, кроме ограниченности.
    2. Чищеный html: если будешь сам велосипедить "очищалку" - гарантировано поимеешь дырки в безопасности, а если использовать какую-то проверенную и поддерживаемую либу - то шанс попасть минимален.

    Использовать json'чик с данными разбитыми по частям можно, но для постов произвольной и вариативной начинки это бессмысленно всё усложнит. Такое используется обычно как связка: конкретные данные + форм-генератор строящий интерфейс по схеме.
    Ответ написан
    2 комментария
  • Каким образом npm install скачивает пакеты?

    Aetae
    @Aetae
    Тлен
    По умолчанию всё качается с npmjs и больше ни откуда.
    Однако в папке с проектом может быть файлик npmrc или yarnrc, который собственно конфигурирует работу пакетного менеджера и там может быть указан твой частный реп.

    Ну и само собой у мебя может быть в рамках системы изменён реп по умолчанию, командой типа: npm set registry ....
    Ответ написан
  • Как перебрать селекторы через for?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Поменять кавычки с " на `, которые включают режим шаблонных строк.

    Но ващет проще document.querySelectorAll и перебрать уже как массив, без таких извращений.
    Ответ написан
    2 комментария
  • Как в опции запроса добавить массив?

    Aetae
    @Aetae
    Тлен
    "items": arr.map((values) => ({ values })),

    Ну или:
    "items": arr.map((values) => ({ values: values.slice(0, 9) })),

    если тебе нужны только первые 9 значений из каждого.
    Ответ написан
  • Как исправить ошибку с типизацией при передаче аргумента?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    М.б. так
    @click="data && handleUpdate(data.id, data.status)"
    , но вообще лучше заранее убедиться, что data есть, а не злоупотреблять ?..

    Ну и конечно, если handleUpdate'у на самом деле пофиг на значения, то можно и так:
    const handleUpdate = async (id?: number, status?: statusType)
    Ответ написан
    Комментировать
  • Можно ли приостановить функцию до "приёма сигнала"?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Сделать то можно, например так:
    const moveQueue = {
      queue: [],
      index: 0,
      create() {
        let endMoveCallback;
        // создаём висячий промис и присваиваем его разрешение в endMoveCallback
        const movePending = new Promise(resolve => endMoveCallback = resolve);
        // index чисто для лога
        endMoveCallback.index = this.index++; 
        // добавляем в очередь
        this.queue.push(endMoveCallback);
        // возвращаем проис ждущий вызова endMoveCallback
        return movePending;
      },
      last() {
        // забираем из очереди последнее добавленное
        return this.queue.pop();
      }
    }
    
    async function turn() {
      await startMove();
      await startShoot();
    }
    
    function startMove() {
      console.log('startMove', moveQueue.index);
    
      return moveQueue.create();
    }
    
    function endMove() {
      const activeMoveEnd = moveQueue.last();
      if (activeMoveEnd) {
    
        console.log('endMove', activeMoveEnd.index)
    
        activeMoveEnd();
      } else {
        onsole.error('`endMove` called when there are no active moves')
      }
    }
    
    function startShoot() {
      console.log('startShoot');
    }
    
    turn();
    setTimeout(() => endMove(), 1000)

    Но скорее всего у тебя что-то не то с архитектурой, и тебе лучше будет почитать книжки по геймдеву.
    Ответ написан
    Комментировать
  • Как найти ошибку Uncaught SyntaxError: Unexpected token?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Эта ошибка в 100 - 10^-18 случаях из 100 появляется когда вместо js файла по ссылке ваш сервер отдаёт отдаёт html файл, чаще всего index, но может и страницу ошибки 404, 403, 503 и т.п.

    Почему она возникает:
    а) неправильно указан путь до файла .js(или вы вообще забыли его положить);
    б) неправильно настроен сервер;
    с) если прилетает страница ошибки - см. описание ошибки.

    P.S. live-server это не "стандартный сервер", это сторонний софт, причём мёртвый несмотря на название. Живой на данный момент форк - alive-server. Но проблема, если что, не в этом.:)
    Ответ написан
    Комментировать
  • Как заставить div уменьшаться и увеличиваться в зависимости от свободного места?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    .main-container
      display: flex
    .content
      flex: auto

    Проблема то в чём?
    Ответ написан
    1 комментарий
  • Как автоматически запускать 'close' в Node.JS Readline?

    Aetae
    @Aetae
    Тлен
    Ну какбэ в чём проблема то?
    let lineNumber = 0;
    rl.on("line", (input) => {
      lineNumber++;
      ...
      if(lineNumber >= 2) rl.close();
    });

    Или типа того.
    Ответ написан
    Комментировать
  • Freenom .tk domain, опоздал с продлением?

    Aetae
    @Aetae
    Тлен
    Если ты просрочил .tk домен - они забирают его себе в "платный пул" и требуют денег за новую регистрацию. Также на себе проверенный факт - если забить и месяц не трогать, домен возвращается в бесплатный пул.
    Почему у тебя по прошествии двух месяцев не вернулись? Может ты часто их пробивал и поддерживал "спрос" в их системе? Х.з. как их система вымогательства на самом деле работает и что учитывает. Так что забудь.:)
    Ответ написан
    1 комментарий
  • Почему v-on:keyup.enter и @:keyup.enter работают по-разному?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    @:click -> @click, соответственно, не: @:keyup.enter, а @keyup.enter

    Ну и не относится к проблеме, но красивее писать так:
    @click="add()" -> @click="add"
    Ответ написан
  • Как динамически передавать методы или переменные в компонент который рэндерится через v-for?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Вот смотри, прям беру твой код и пихаю как есть:

    И смотри-ка, всё работает.
    Проблема твоя где-то в другом месте.

    P.S. По-нормальному это делается как-то так:
    const thumbs = reactive([null, null, null]);
    v-for="(swiper, i) in thumbs" @swiper="thumbs[i]=$event" :thumbs="{ swiper }"

    Но может и ещё проще, если бы было больше контекста.:)
    Ответ написан
  • Как остановить цикл по нажатию кнопки html / js?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Никак.
    По умолчанию, без специальных ухищрений, javascript работает в одном потоке.
    Пока цикл не завершится - вообще больше ничего не произойдёт, в т.ч. реакция на клик - страница тупо "зависает".
    Ответ написан
    Комментировать