• Angular schematics?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    да там же, где и обычно
    https://angular.io/guide/schematics-for-libraries

    случалось делать себе схематики, возможностей много, но не уверен что для чего-то простого не проще просто на ноде написать скрипт.
    Ответ написан
    7 комментариев
  • Как собрать данные с указанных элементов и разместить их в data-атрибуте?

    @Weishaypt
    $(window).on("load", function (e) {
    
        $(".euro").on("click", function(e){
            $(".priceNum").each(function(item,index){
                let price = $(this).html();
                $(this).attr("data-price", price)
            })
        })
    
    })
    Ответ написан
    4 комментария
  • Как синтаксически правильно написать без шаблонных литералов?

    Kublyakov
    @Kublyakov
    как-то так?
    hoverOverlay.style.transform = "translate(" + coords.left + "px, " + coords.top + "px)";
    Ответ написан
    8 комментариев
  • Вопрос с собеседования - почему не меняется объект?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    потому что в строке
    let products = obj.data

    вы по сути в products вставляете ссылку на obj.data

    а в строке
    products = []

    вы заменяете эту ссылку на другую

    при этом содержимое
    obj.data
    тоже ссылка, и она остается прежней.

    другими словами: если вы записали на листок телефон своей девушки а потом найдя другую девушку, про старую решили забыть и зачеркнув ее номер написали номер новой девушки то прежня девушка никуда не исчезла? она ведь по прежнему сидит на своем номере телефона и ждет вашего звонка? (в данной ситуации products и есть этот листок с номером ))))

    ЗЫ: был несколько невнимателен, не достиг моего мозга последний абзац вашего вопроса. Ответили вы верно.
    Ответ написан
    2 комментария
  • Как сохранять в localStorage без потери установленных по умолчанию данных?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер

    ngOnChanges()
    A callback method that is invoked immediately after the default change detector has checked data-bound properties if at least one has changed, and before the view and content children are checked.


    Потому что onChanges срабатывает, когда изменились входные или выходные свойства компонента. А у вас их нет.

    Ну и вообще код не очень.
    вот
    Ответ написан
    Комментировать
  • Какие шаблоны проектирования js применяются на практике чаще всего?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    какие паттерны применяются чаще всего на практике и где

    Сразу отмечу, что все это чисто мое имхо, которое может не совпадать с мнением окружающих. В контексте фронтенда обычно все довольно просто. По моим наблюдениям в среднем сайте могут иметь смысл:
    1. Модули (делим код на независимые части)
    2. Фабрики (для компонентов интерфейса)
    3. Синглтоны (для хранилищ, точек сбора полифиллов / утилит и.т.д.)
    4. Адаптеры (для зависимостей и полифилов, которые могут измениться / выпилиться)
    5. Наблюдатели (для сбора происходящих событий в одном месте)
    6. Хранители (для сохранения действий пользователя и "Ctrl-Z")
    7. Стратегии (если действуем в зависимости от прилетевших данных)

    Другим паттернам применение вижу редко, только если под какую-то замороченную бизнес-логику. Хотя кого я обманываю, на среднем сайте обычно происходит только один паттерн - доширак из костылей. Ну и стоит сказать, что SPA-фреймворки имеют свойство навязывать свои подходы к решению задач, но это отдельная тема.

    Важно понимать, что паттерны проектирования - это просто хорошие идеи по поводу того, как организовать большой объем кода в той или иной ситуации. Это не "изучи тайное знание, запомни, и делай так всегда", не "используй паттерны, потому что великие их используют", это скорее "если не уверен как организовать код, возьми готовую идею, она вроде работает". Если вы будете просто решать задачи, то через N лет практики вы сами их все "изобретете", только не будете знать, что у них есть названия. Эффективно будет организовать себе заметку о том, какие из этих идей для чего примерно применяют, а потом, в процессе работы, в нее подглядывать, если встал вопрос "как организовать этот код".
    Ответ написан
    7 комментариев
  • Какие самые популярные паттерны проектирования в JavaScript?

    Zoominger
    @Zoominger
    System Integrator
    Copy-Paste.

    Именно этот паттерн вам бы следовало применить к вашему вопросу и поисковой строке Тостера, потому что это уже 100500-ый вопрос на тему паттернов в ЖС.
    Ответ написан
    13 комментариев
  • Как работает код?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Потому что
    n-- не тоже самое что n-1
    Первое уменьшает n на единицу и возвращает результат.
    Второе возвращает число на еденицу меньше чем n. При этом само n остается прежним, в результате вы и получаете бесконечный цикл (ведь n не меняется)

    А вот следующие выражения идентичны:
    n=n-1;
    n-=1;
    n--;
    Ответ написан
    3 комментария
  • Как уникализировать массив объектов по значениям нескольких свойств?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Вот вариант максимально короткий и лёгкий для понимания:

    const unique = (arr, keys) =>
      arr.filter(n => n === arr.find(m => keys.every(k => m[k] === n[k])));
    
    
    const result = unique(arr, [ 'model', 'param1', 'param2' ]);

    Для вашего случая подходит, но вообще, есть ряд проблем:
    • Иногда косячит

      Если объект присутствует в массиве несколько раз, то такие дубликаты не будут отброшены. Конкретно эта имеет тривиальное решение - вместо ссылок можно сравнивать индексы, под которыми объекты представлены в массиве:

      - arr.filter(n => n === arr.find
      + arr.filter((n, i, a) => i === a.findIndex
    • Недостаточно гибко

      Что если уникализировать надо не по собственно свойствам, а по каким-то производным от них значениям? Например, у объектов есть вложенные объекты, и нужны их свойства; или есть число, а нужен остаток от его деления на какое-то другое число; или есть дата, в которой важен только месяц.
    • Сложность

      Фильтрация линейна, поиск тоже, одно внутри другого даёт квадрат.

    Так что вот вариант потяжелее:

    const unique = function(arr, keys = n => n) {
      const picked = new Map;
      return arr.filter((...args) => {
        const p = []
          .concat(keys(...args))
          .reduce((acc, k) => acc.set(k, acc.get(k) || new Map).get(k), picked);
    
        return !p.set(this, p.has(this)).get(this);
      });
    }.bind(Symbol());
    
    
    const result = unique(arr, n => [ n.model, n.param1, n.param2 ]);
    Ответ написан
    2 комментария
  • Как реализовать анимацию?

    profesor08
    @profesor08 Куратор тега CSS
    Похожу реализацию можно посмотреть тут: https://codepen.io/Profesor08/pen/EzdPwv
    Именно посмотреть, а не копипастить код, если твой проект коммерческий.
    Ответ написан
    1 комментарий
  • Как правильно импортировать модуль?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    @NgModule({
      exports: [
        UiModule
      ],
    })
    export class CoreModule { }


    Импортировать необязательно, нужно только если что-то из UiModule используется в самом CoreModule
    Ответ написан
    2 комментария
  • Возможно ли при клике сэмулировать двойнок клик?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Ваниль:
    document.getElementById("tot-block")
      .addEventListener("click", e => e.target.dispatchEvent(
        new MouseEvent('dblclick', {
          'view': window,
          'bubbles': true,
          'cancelable': true
        })
      )
    );


    ⚠️ Любое событие, сгенерированное скриптом, отличается от «честного» действия пользователя свойством события isTrusted.
    Ответ написан
    Комментировать
  • Как узнать почему функция не проходит тест?

    0xD34F
    @0xD34F Куратор тега JavaScript
    /\w{6}/.test(password)

    Нет, это не

    At least six characters long

    Это просто шесть символов подряд, до и после них может быть что угодно, в том числе и не требуемые alphanumeric. Поэтому: надо указать, что проверяется вся строка целиком (^ - начало строки, $ - конец); символов может быть больше шести (квантификатор {} позволяет указывать диапазон значений, верхнюю границу оставляем открытой). Т.е., правильно будет так:

    /^\w{6,}$/.test(password)

    UPD. \w - не alphanumeric, это ещё и _, так что придётся перечислить нужные символы в более явном виде. Кроме того, вместо четырёх отдельных выражений можно сделать одно:

    /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,}$/.test(password)
    Ответ написан
    6 комментариев
  • Как вывести все числа, начиная от заданного пользователем и до нуля?

    0xD34F
    @0xD34F Куратор тега JavaScript
    document.querySelector('button').addEventListener('click', function() {
      const val = +document.querySelector('#elem1').value;
      const sign = Math.sign(val);
    
      document.querySelector('#str').innerHTML = Array
        .from({ length: val * sign + 1 }, (n, i) => val - i * sign)
        .join('<br>');
    });
    Ответ написан
    Комментировать
  • Как изменить стили через javascript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    var el = document.querySelector("a[href='/products/962112']"); // в селекторе хардкод... не будет ссылки с таким href - все сломается
    
    // тут был цикл, но я его убрал, ибо один элемент берем
    
    var products = document.getElementsByClassName('product'); // тут коллекция, ее надо перебирать циклом
    for(var i = 0; i < products.length; i++) {
      products[i].style.height = el.style.height;
    }


    UPD: по просьбе origami1024 добавляю вариант с CSSOM
    Во-первых, нам понадобится новый элемент style, чей CSSOM мы будем править, его стоит разместить ниже других стилевых подключений (не важно через style или link), я же просто добавлю в конец head
    Сам CSSOM элемента style доступен через его свойство sheet - извлеку его сразу в переменную:
    const {sheet} = document.head.appendChild(document.createElement('style'));

    Во-вторых, в CSSOM правила пронумерованы с 0. Притом можно заменять существующие правила по их индексу, а можно вставлять новые в конец (индекс при этом так же нужно указывать, а если указать неверно - выкинет эксэпшн). Нам же удобнее обращаться к правилам по селектору, поэтому я сделаю объект для сопоставления селектора с индексом правила и счетчик индексов:
    const rulesIndexesBySelector = {};
    let nextIndex = 0;

    Ну и наконец реализуем вспомогательную функцию для обновления CSSOM правила по его селектору:
    function updateRule(selector, declarations) {
      const rule = `${selector}{${declarations}}`; // полное правило - селектор + декларации в {}
      if(selector in rulesIndexesBySelector) {
        // индекс селектора уже известен, обновим правило
        const index = rulesIndexesBySelector[selector];
        sheet.deleteRule(index); // сначала удалим старое правило освободив индекс и отменив его свойства
        sheet.insertRule(rule, index); // и вставим на его место новое
      } else {
        // новый селектор
        const index = nextIndex++; // важен именно постинкримент, чтоб самый первый получил 0, второй 1 и т.д.
        rulesIndexesBySelector[selector] = index; // запомним на будущее
        sheet.insertRule(rule, index); // и вставим правило в конец
      }
    }

    Пример примитивный, но каждый думаю спокойно расширит его под себя.
    У меня например declarations собираются из vue объекта, который можно мутировать (реактивные стили оО) + добавляются вендорные префиксы, если браузер не знает каких-то свойств (не автопрефиксер конечно, но зато работает по месту)

    Использовать это все теперь можно крайне просто:
    updateRule('.product', 'height: 40px; width: 50px');
    Ответ написан
    5 комментариев
  • Передать переменную из js в html iframe src?

    @bogomazov_vadim
    Ответ написан
    Комментировать
  • С чего начать изучать NodeJS?

    Zoominger
    @Zoominger
    System Integrator
    С замечательной книги "Исскуство гугления для дошколят" авторства Евгения Борисовича Ланского.
    Читаете Е. Б. Ланского и сразу всё поймёте.
    Ответ написан
    2 комментария