Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<input
type="text"
[disabled]="isDisabled"
placeholder="Some Field"
[value]="modelValue"
required="required"
maxlength="12" />
input
.type : =text
.disabled < isDisabled
.placeholder : =Some Field
.value < modelValue
.required : true
.maxLength : 12
.disabled < isDisabled
.placeholder : =Some Field
<div [inner-html]="expression"></div>
div['innerHtml'] = expression();
.disabled < isDisabled : true
div['innerHtml'] = expression();
div.innerHtml = expression();
[(ngModel)]="firstName"
<button (click)="doSomething($event)">
element.addEventListener('click', event => doSomething(event));
Не понял, что там не согласуется?
.placeholder : =Some Field
В этом коде статическая типизация идёт лесом, да и не удобно так писать, поэтому лучше так:
Тем более, что такая запись её в конец убивает:
Да, именно таким, ибо чтобы ставить тут лишние скобочки и доллары
Это типа двусторонний биндинг?Нет, это установка значения, а биндинги через стрелочки. Точнее это даже не биндинги, а делегирование, что эквивалентно двустороннему биндингу.
Искать где там у меня двусторонние биндинги выйдет сильно тяжело.А зачем вам искать абстрактные биндинги? Обычно всё же интересует конкретное свойство — находим его по имени, а дальше смотрим что там для него указано.
удобнее чем один символ точки, его легко не заметитьА как без точки сделать так?
.style.top < scrollTop : 0
Возьмите десяток джуниоров, покажите им ваш пример и посчитайте сколько из них разберутся что что означает.В синтаксисе ангуляра точно никто не разберётся без усердного вкуривания документации. В моём, впрочем, тоже, правда синтаксис гораздо проще и единообразней (его легче запомнить).
.required : true
var required: boolean
[disabled]="isDisabled"
// присваиваем констатну
foo = 123
// присваиваем значение переменной
[foo] = bar
foo = 123 // константа, обычное присвоение
[foo] = bar // интерпритируется как
watchFor('bar', () => foo = bar);
foo &= bar;
<template [ngIf]="expression">
<span>Conditional HTML</span>
</template>
<span *ngIf="expression">Conditional HTML</span>
<todo-cmp *ngFor="#t of todos; #i=index" [model]="t" [index]="t"></todo-cmp>
<template ngFor [ngForOf]="todos" #t="$implicit" #index="i">
<todo-cmp [model]="t" [index]="i"></todo-cmp>
</template>
$mol_spoiler : $mol_block child
< switcher : $mol_button
child < title : null
eventClick < eventToggle : null
< content : null
get child( ){ return [
this.switcher ,
this.expanded ? this.content : null ,
] )
нежелания разобраться в синтаксисе?
$mol_spolier_demo : $mol_spoiler
title : $mol_icon type < iconType : =expand
content : $mol_demo_filler
var loginButton;
if (loggedIn) {
loginButton = <LogoutButton />;
} else {
loginButton = <LoginButton />;
}
return (
<nav>
<Home />
{loginButton}
</nav>
);
return (
<section>
<h1>Color</h1>
<h3>Name</h3>
<p>{this.state.color || "white"}</p>
<h3>Hex</h3>
<p>
{(() => {
switch (this.state.color) {
case "red": return "#FF0000";
case "green": return "#00FF00";
case "blue": return "#0000FF";
default: return "#FFFFFF";
}
})()}
</p>
</section>
);
return (
<nav>
<Home />
{loggedIn ?
<LogoutButton />
:
<LoginButton />
}
</nav>
);
render() {
const { isLoggedIn } = this.props;
return (
<nav>
<Home />
{loggedIn ?
this.renderSomething()
:
this.renderSomethingElse()
}
</nav>
);
}
renderSomething() {
return (
<LogoutButton />
);
}
renderSomethingElse() {
return (
<LoginButton />
);
}
const COLORS_IN_HEX = {
red: '#FF0000',
green: '#00FF00',
blue: '#0000FF'
};
render() {
const { color } = this.state;
return (
<section>
<h1>Color</h1>
<h3>Name</h3>
<p>{color || 'white'}</p>
<h3>Hex</h3>
<p>
{this.getColorInHex(color)}
</p>
</section>
);
}
getColorInHex(color) {
return COLORS_IN_HEX[color] || '#FFFFFF';
}
но направление так и осталось неверное
В качестве примера достаточно взглянуть на ngOptions
Или еще один пример (о котором я писал выше) про передачу параметров в колбэк директивы
function link(scope, element, attrs) {
scope.$apply(attrs.onClick);
}
на моей улице наступит праздник))
«Это же простая итерация по массиву объектов! Зачем она вообще?» — спросит реактовод.
«А затем, что иначе вы не сможете в значение option передать что-то кроме строки!»
«Ну, знаете ли...»
неконтролируемую связность директив\модулей, что по сути имеется в MV* архитектурах тоже
<main-directive sub-directive1 subdirective2><main-directive>
В голову даже не лезет зачем так делать как вы написали
все еще поддерживает аттрибутивные директивы
что не разберешь, откуда что берется
Также старый Angular использовал $scope (или даже $rootScope), и люди ошибочно его использовали для связи компонентов между собой
но если в него положить много (кстати, сколько это)
плюс отладка тяжелая
{{foobar.test}}' в случае если foobar не объект, будет падать с TypeError и т.д.Также у меня плохие отношения с двухсторонним биндингом
{{foobar.test()}}
Если в test возникнет исключение, оно будет проглочено как в первой версии или всё же выведено в консоль?
EXCEPTION: Error during evaluation of "click"), ну и выведет ORIGINAL EXCEPTION: Error: Your exception message.что ngFormModel — не серебряная пуля.
Разбираемся с синтаксисом шаблонов в Angular2