Ответы пользователя по тегу JavaScript
  • Какая версия NgRx Effects совместима с Angular 5.2?

    @bromzh
    Drugs-driven development
    У меня в проекте:
    "@angular/core": "^5.2.0",
    ...
    "@ngrx/effects": "^5.2.0",

    И всё работает.
    Ответ написан
    Комментировать
  • Angular 2 вложеные директивы?

    @bromzh
    Drugs-driven development
    Про модули (NgModule): https://angular.io/docs/ts/latest/guide/ngmodule.html

    module.id - это немного другое. Оно используется SystemJS при сборке и нужно оно для того, чтобы пути к шаблонам и стилям были относительно текущего файла: schwarty.com/2015/12/22/angular2-relative-paths-fo...

    Начинать учить ng2 самое время, так как релиз уже вышел.

    можно ли настроить компилятор ts что бы он ложил все js файли в отдельную папку, а не возлу ts файлов?


    Конечно, для этого есть опция outDir. https://www.typescriptlang.org/docs/handbook/compi...
    Ответ написан
    Комментировать
  • Как лучше хранить html щаблоны?

    @bromzh
    Drugs-driven development
    Если первый ангуляр, то надо хранить в строках.
    https://docs.angularjs.org/api/ng/service/$templat...

    И есть всякие плагины для автоконвертации из html в js-файл с этим кэшем:
    https://www.npmjs.com/package/grunt-angular-templates
    https://www.npmjs.com/package/gulp-angular-templat...
    Ответ написан
    Комментировать
  • Как на js вычислить предел?

    Комментировать
  • Как настроить Webstorm для NodeJS Express?

    @bromzh
    Drugs-driven development
    Можно упростить жизнь

    Да. Можно писать jsdoc, webstorm умеет их анализировать и извлекать типы. Или можно использовать https://flowtype.org/
    Однако, это поможет только для своего кода. Чтобы нормальный автокомплит был и для сторонних либ, можно на вкладке libraries подключить для каждой из библиотек файлы с типами (.d.ts). Вот видео

    Самый лучший вариант - писать всё на TypeScript. А файлы с типами для подключаемых библиотек легко подключаются через npm-модуль typings. При правильной настройке, вебшторм будет подсказывать очень точно.
    Ответ написан
    Комментировать
  • Почему JavaScript не верно считает числа?

    @bromzh
    Drugs-driven development
    Javascript всё делает правильно, потому что стандарт. См. www.softelectro.ru/ieee754.html

    Либо считай всё в целых числах, либо https://github.com/MikeMcl/decimal.js/
    Ответ написан
    Комментировать
  • Как авторизироваться с Google с помощью Angular?

    @bromzh
    Drugs-driven development
    Можно скинуть состояние в localstorage, а после возвращения со страницы гугла его восстановить.
    Ответ написан
    Комментировать
  • Актуален ли еще Angular 1.x?

    @bromzh
    Drugs-driven development
    Актуален, но в основном в рамках поддержки старого кода. Новые проекты начинать на первом не стоит. Зато, если начать учить второй сейчас, то к моменту релиза, и можно будет легче устроиться на соответствующие вакансии.
    Ответ написан
    Комментировать
  • Выбор фреймворка для админ панели?

    @bromzh
    Drugs-driven development
    Polymer? Не фреймворк, но зато имеет много готовых компонентов. Можно начать со статических страниц и добавлять в них свои и чужие компоненты.
    Для использования достаточно подключить только 1 js и несколько импортов html для компонентов.

    Ну а так, раз уж первый angular знаком, то и писать надо на нём, чтобы было быстро. Год-два он точно поживёт, да и если использовать компонентный подход (компоненты появились в версии 1.5), то мигрировать на второй ангуляр (когда он зарелизится и обрастёт доками) не составит проблем. Тем более, инструменты для перехода есть.
    Ответ написан
    Комментировать
  • Div, имеющий position: relative, "прилепить" к верху и бокам станицы?

    @bromzh
    Drugs-driven development
    Не, нужна position: fixed, и ещё отступ контента от верха страницы, иначе он будет залезать под шапку.
    .site-header {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
      height: Npx;
    }
    body {
      padding-top: Npx;
    }


    Или можно использовать флексбокс и обойтись без этих костылей.
    Ответ написан
    Комментировать
  • Какой каркас angular приложения?

    @bromzh
    Drugs-driven development
    Ответ написан
    Комментировать
  • Js как то странно считает числа, почему?

    @bromzh
    Drugs-driven development
    С такого, что нужно понимать, как эти числа вообще хранятся в памяти. Тогда и придёт осознание, что всё правильно.
    Для понимания же можно почитать стандарт хранения чисел, там все ответы на вопросы вида "чо за хрень с числами?".
    Ну и такое не только в JS так, а почти везде.
    Ответ написан
    Комментировать
  • Почему ругается компилятор typescript?

    @bromzh
    Drugs-driven development
    Немного поправлю Евгения, достаточно объявить нужное поле в классе, тип можно не ставить:
    export class AppComponent {
        sommm; // Можно и без типа, зависит от настройки компилятора
        title = 'hero';
        hero: Hero = {
          id: 1,
          name: 'Wind'
        }
        constructor (){
          this.sommm = 'from this some'
        }    
     }


    Или ещё можно добавить модификатор в аргумент конструктора:
    export class AppComponent {
        // В Angular 2 так можно делать в классах, 
        // которые не являются компонентами/директивами/сервисами/пайпами и т.п.
        constructor (public sommm: string = 'from this some') {}   
     }
    // Это аналогично такому:
    export class AppComponent {
        sommm: string;
        constructor (sommm: string = 'from this some') {
            this.sommm = sommm;
        }    
     }

    Но типы всё-таки лучше указывать.

    UPD 0. В TypeScript обычно, если переменная имеет тип, отличный от any, то динамически добавлять поля в неё нельзя. Когда создаётся экземпляр класса (оператор new), вызывается специальный метод с именем 'constructor'. Ты пытаешься в конструкторе записать в поле sommm. Компилятор TypeScript работает до рантайма и типы определяет исходя из объявления класса. В данном случае, тип AppComponent имеет 2 поля (title, hero). Так что с его точки зрения, у типа AppComponent нет поля sommm, потому-то он и ругается.
    Иногда, видимо из-за особенностей лайв-серверов, бывает, что хоть компилятор и ругается на несоответствие типов, но код запускается и работает, ведь с точки зрения JS, всё выглядит верно.

    UPD 1. Хоть я и привёл пример, где не указывал типы переменных, но так делать не стоит (почти) никогда. Чтобы оградить себя от написания такого кода, можно добавить опцию компилятора "noImplicitAny". Без неё следующий код скомпилируется без ошибок:
    let a;
    function foo(bar) {}
    class Bar {
      foo;
      private bar;
    }

    Со включённой опцией компилятор выдаст ошибки там, где переменные, аргументы функций и методов или поля классов объявлены без типов.
    Нужно всегда стараться указывать тип у переменных. Если один тип не подходит, можно попробовать сделать функцию/метод/класс дженериками. Если тип неизвестен - то можно поставить any. Но обычно такое бывает редко, ведь обычно ты знаешь, что за тип ожидается (у меня в проектах практически нет переменных с типом any).

    UPD 2. Я привёл пример, где в конструкторе указывается модификатор. Это специальный синтаксис в Typescript, который позволяет уменьшить количество повторяющегося кода.
    Однако, есть важный момент: внедрение зависимостей в компоненты/директивы/сервисы/и т.п. во втором ангуляре идёт через конструктор. Причём, в typescript-версии, фреймворк по-умолчанию извлекает информацию о типе аргумента конструктора и пытается внедрить по этому типу нужную зависимость. Поэтому в конструкторах должны быть только внедряемые зависимости.

    UPD 3. Если пишешь на ангуляре, то стоит изучить styleguide и стараться следовать ему. Плюс, хорошо ещё прикрутить к проекту tslint.
    Ответ написан
    4 комментария
  • Как писать более правильно?

    @bromzh
    Drugs-driven development
    Лучше сразу приучать к новому синтаксису es6 (классы, let/const):
    export class Human {
        constructor({ hp }) {
            this.hp = {
                current: hp,
                max: hp,
            };
        }
    
        damage(point) {
            this.hp.current -= point;
        }
    }
    let human = new Human({ hp: 100 });
    human.damage(10);
    console.log(human.hp.current);
    Ответ написан
    7 комментариев
  • Можно ли RequireJs использовать для динамического подключения модулей?

    @bromzh
    Drugs-driven development
    Вебпак может подключать файлы асинхронно, см. https://github.com/gaearon/promise-loader и/или https://github.com/NekR/async-module-loader
    Плюс в том, что вебпак не будет засорять глобальную область видимости, т.е. даже если импортировать jquery, то переменная $ в window не создастся, что удобно. Так что не будет проблем с выгрузкой модулей, просто импортируй список нужных модулей через асинхронные загрузчики.
    Ответ написан
    1 комментарий
  • Можно ли писать на TypeScript под NodeJS?

    @bromzh
    Drugs-driven development
    Можно ли писать на TypeScript под NodeJS? Вопрос о том, хорошая ли это практика?

    Да, да
    Смогу ли я использовать без особых проблем пакеты из npm, либо какие-то сторонние скрипты/классы написанные на js?

    Если разобраться, для чего нужны .d.ts-файлы и как использовать typings, то проблем не будет.

    Плюсы:
    - свежие фичи из спецификаций ES
    - статическая типизация, а, следовательно, все плюсы, которые она даёт. если в двух словах: часть ошибок будет отлавливаться ещё до запуска и, соответственно, нужно меньше тестов
    - хорошая поддержка языка всякими редакторами. IDE от Jetbrains лучше будут выдавать подсказки. И даже простые редакторы кода, например Atom, Sublime, VS Code начнут выдавать нормальные подсказки, переходить по определениям в коде, выдавать сигнатуру методов, и т.д.

    Минусы:
    - Нужно понять, как правильно подключать обычные js-библиотеки к проекту. В целом, это не сложно, но многие не осиливают.
    - Типы "существуют" только в compile-time. На выходе обычный JS со всей его динамической природой. Если код написан плохо (например, часто используется тип any), то typescript не поможет.

    А про отладку я уже говорил: с ней проблем нет. Просто нужно подключить вот эту штуку, и всё будет нормально. VS Code точно умеет подключаться к нодовскому (и хромовскому) дебагеру и будет прыгать по исходникам, а не по скомпилированной каше.
    Ответ написан
    Комментировать
  • Как поисковые системы относятся к Angular.js?

    @bromzh
    Drugs-driven development
    Первый ангуляр индексируется плохо. Нужно городить костыли.

    Второй ангуляр умеет выполняться на сервере, таким образом можно получить начальные данные и отдать на клиент уже предварительно отрендереный html с ними. Так что второй ангуляр индексируется нормально (если правильно готовить).
    Ответ написан
    Комментировать
  • Как оптимизировать проект на require.js?

    @bromzh
    Drugs-driven development
    webpack + async-loader для него.
    Ответ написан