Угловой 2: Разница между связыванием свойств с и без скобок?

Я заметил, что можно связывать вещи без скобок. В чем разница?

Машинопись:

import { Component, Input } from '@angular/core';

@Component( {
    selector: 'my-comp',
    templateUrl: `
    input is {{foo}}
  `

})
export class myComponent {
    @Input() public foo: string;

    constructor() { }
    }

HTML:

Случай 1

<my-comp [foo]="bar"></my-comp>

Дело 2

<my-comp foo="bar"></my-comp>

2 ответа

В общем, мы можем сказать, что мы должны использовать привязки без скобок, только когда у нас есть фиксированное свойство строки:

"Вы должны опустить квадратные скобки, когда выполняются все следующие условия: Свойство target принимает строковое значение. Строка - это фиксированное значение, которое вы можете вставить в шаблон. Это начальное значение никогда не изменяется. Вы обычно инициализируете атрибуты таким образом в стандарте. HTML, и он работает так же хорошо для инициализации директив и свойств компонентов. (...) Angular устанавливает его и забывает об этом." (...) При задании для свойства элемента нестрокового значения данных необходимо использовать привязку свойства "(источник: https://angular.io/guide/template-syntax).

В общем, это означает, что значение справа интерпретируется только при использовании скобок. Вы можете удалить квадратные скобки всякий раз, когда вы видите кавычки в кавычках справа: [anyStringProperty]="'hello'" можно изменить на anyStringProperty = "hello"

Есть некоторые случаи, когда нам нужно динамически добавлять подобные атрибуты html, и пример, который приходит из json из запроса API.

Случай 1 [] известный как связывание свойств

<my-comp [foo]="data.bar"></my-comp>

Дело 2 {{ }} известный как интерполяция

<my-comp foo="{{data.bar}}"></my-comp>

Случай 3 Условная обработка

<my-comp [attr.foo]="data.bar ? true : false"></my-comp>

И {{ }}, называемый Interpolation, и [], называемый Property Binding, означают, что angular понимают, что существует один путь от источника данных для просмотра цели.

Для получения дополнительной информации посетите www.codementor.io

Вот краткое описание всей ситуации:

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

Таким образом, будет назначать "постоянную" строку для ввода my-tag. Чтобы добиться того же эффекта в квадратных скобках: обратите внимание на одинарную кавычку внутри. Если вы не поместили туда одинарную кавычку, входные данные my-tag будут привязаны к свойству родительского компонента (где вы пишете этот шаблон) или переменной шаблона (как, например, let-constant для ngFor) с именем constant.

Форма здесь В чем разница между привязкой свойства и обычным атрибутом

Есть небольшая, может быть, неважная ситуация, но в некоторых случаях может раздражать то, что вы ее упускаете.

номер


Случай 1

<my-comp [foo]="90"></my-comp>

Случай 2

<my-comp foo="90"></my-comp>

Случай 1: typeof foo => 'number'

Случай 2: typeof foo => 'string'

Булево


Случай 3

<my-comp [foo]="true"></my-comp>

Случай 4

<my-comp foo="true"></my-comp>

Случай 3: typeof foo => 'boolean'

Случай 4: typeof foo => 'string'

Из Документов - помните о скобках:

Скобки [] указывают Angular вычислить выражение шаблона. Если вы опустите скобки, Angular рассматривает строку как константу и инициализирует целевое свойство этой строкой.

Другие вопросы по тегам