Pull to refresh
33
0
Тимофей Яценко @thekip

User

Send message

Размер luxon стоит сравнивать не только с moment+locales, но с moment+locales+moment-timezone
И вот там выигрыши получается настолько большой, что выбор очевиден. (В основном потому что в moment-timezone необходимо грузить БД с таймзонами, а в luxon используется intl API)

Специально для таких случаев существует Declaration Merging https://www.typescriptlang.org/docs/handbook/declaration-merging.html. Не нравится как описан какой то тип из тайпинов? Допиши сам!
А ставить any или того хуже @ts-ignore это подкладывать грабли себе же самому

Не знаю что конкретно нового они недавно зарелизили, но я еще в прошлом году мог выбирать по Alt Enter нужный символ, и добавлялся импорт именно выбранного символа.


А так да, импорты хоть 5, хоть 10 точек, неважно. Все автоматом делается средой. Не могу представить тот гемор если бы делал бы это сам (и тот гемор на который люди себя толкают выбирая другие инструменты разработки).

Стоит добавить, что некоторые декораторы написанные для ES7/Babel не будут работать в typescript, из-за особенностей того как он транспилит свойства.
Например такие декораторы как noneunemerable из core-decorators работать не будут (и почти все декораторы кооторые применяются к полям).

с find usages так же попробуй. Галочкой не включишь.

С require, если у тебя ошибка в названии файла, у тебя упадет на этапе компиляции в Webpack, а не в рантайме, когда ты откроешь этот компонент.


А поиском по строке пользоваться в проектах с TypeScript…

А чего там должно стыковаться? Просто ты описываешь возвращаемую строку, в удобном тебе синтаксисе, например в jade.


Из require в компонент вернется просто строка html, такая же, какую бы ты написал от руки.


Т.е. исходя из примера внутри ./my-app.jade было бы что то вроде:


h1 {{title}}
h2 {{hero.name}} details!
div
  label id: 
  | {{hero.id}}
div
  label name: 
  input([(ngmodel)]='hero.name', placeholder='name')

С внутренним деревом Jade оно никак не стыкуется, если вопрос в этом.


Еще один большой плюс, такого подхода, это то что нормальная IDE например WebStorm, при переименовании файла шаблона автоматически заменит его во всех местах использования, чего не будет с простой строкой в templateUrl:.


Таким же образом можно подключать и .html файлы, без дополнительного процессинга.

Как уже заметили есть еще templateUrl.
Но еще удобнее юзать вместе с webpack, и каким ни будь лоадером, например Jade (Pug):

@Component({
  selector: 'my-app',
  template: require('./my-app.jade')
})
// Иерархию ролей расположим в файле auth.php в директории config приложения
        if ($this->authFile === null) {
            $this->authFile = Yii::getPathOfAlias('application.config.auth') . '.php';
        }
Я живу в квартире, за которую заплатил чуть больше, но у неё есть подземная парковка, парковка во дворе, и парковка вокруг дома. А за моим домом стоят 4 14-этажных дома, у которых нет даже намека на инфраструутуру.
Люди паркуются на дорогре, на тротуаре, иии… в моем дворе.
Я нахожусь по эту сторону.

Вы считаете что это нормально?
Пока вы будете голосовать рублем за те новостройки в которых строители не удосжились спроектировать парковку для жильцов, их будут продолжать строить.
Если вам не хватает денег на нормальное жилье с парковкой для вашей машины, то вероятнее всего нужно от чего то отказаться. А не превращать свои проблемы, в проблемы других людей, паркуя свою машину в соседнем дворе, где жильцы купили квартиру с продуманной парковкой.
Просто вы начали знакомство с Angular «не с той стороны»

Начните знакомство отсюда angularjs.org/ (с главы The Basics, знакомство займет не больше 10 минут).
И возможно вы вдохновитесь декларативным подходом, так же как и я в свое время.
А зачем внутри директивы вообще создавать приложение (ng-app)?
Или даже ссылка на отдельный файл:

templateUrl: 'partials/SomeTemplate.html'
Я бы обратил еще особое внимание на то, что в изолированном скоупе мы задаем переменные camelCase'ом, но в DOM они должны быть написаны через дефис, т.е:

scope:{
      localVar1:"@", /*localVar1:"@localVar1" */
      localVar2:"=",  /*localVar2:"@localVar2" */
      localVar3:"&"  /*localVar3:"@localVar3" */
}

<div ng-app="helloHabrahabr">
        <span habra-habr="hello" local-var1="Hello Habr!"  local-var2="Foo" ></span>    
</div>

А так работать НЕ будет:
<div ng-app="helloHabrahabr">
        <span habra-habr="hello" localVar1="Hello Habr!"  localVar2="Foo" ></span>    
</div>
$this->news это виртуальное свойство. При обращении к нему вызовется функция $this->getNews().
Это поведение задается магическим методом __get() класса CComponent, который является прародителем почти для всех классов в Yii.

www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/
Кажется я повременил с выводами, и в действительности обновлялось оно у меня благодаря коду angular, а не самого momentJs.
Под крутым апи я имел ввиду, что MomentJs имеет очень богатые возможности интернализации, которые так же дают возможность изменения поведения форматирования даты.
К примеру momentJs, имеет 2 метода, вывода даты от текущего числа это fromNow() и calendar(). Но мне хотелось использовать оба метода одновременно. Что бы в пределах того же дня работал метод fromNow(), а в пределах недели уже calendar(), и я это легко реализовал:

    calendar : {
        sameDay: function(){
           return  "["+this.fromNow()+"]";
        }, //[Сегодня в] LT
        nextDay: '[Завтра в] LT',
        lastDay: '[Вчера в] LT',
        nextWeek: function () {
            return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
        },
        lastWeek: function () {
            return  "["+this.fromNow()+"]";
        },
        sameElse: 'L'
    }
Moment.js делает тоже самое, и точно так же реалтайм апдейтит значение. К тому же с пол пинка работает с AngularJs и имеет очень крутое Api.
www.yiiframework.com/extension/yiismartmenu
Похоже на то что вам нужно.

Information

Rating
Does not participate
Location
Краснодар, Краснодарский край, Россия
Date of birth
Registered
Activity