Angular — boolean не работает в шаблоне

#angular #data-binding #boolean

#angular #привязка данных #логическое

Вопрос:

У меня проблема с привязкой данных и передачей данных от родительского компонента к дочернему. Существует это значение ‘active’, которое должно быть логическим, и я хотел бы изменить класс кнопки в зависимости от этого значения. Итак, есть этот родительский компонент, который передает true / false дочернему элементу, чем я могу даже правильно распечатать это значение (например, в

теги) но всякий раз, когда дело доходит до проверки типа ‘active == true’, она всегда дает один ответ, независимо от того, какая переменная активна. Кто-нибудь может мне помочь? =)

Родительский компонент .html:

 <div class="box">
<div class="columns is-mobile is-centered is-multiline" >
    <div class="column is-half-mobile is-4-tablet" *ngFor = 'let name of names; let i = index' >
        <app-controler [ingredientName]='name' active="{{newNames[name]}}"></app-controler>
    </div>
</div>
</div>
 

Родительский компонент .ts:

 export class ControlsComponent implements OnInit {
  ingredients:Pizza
  names = ['tomatoes', 'onions', 'cheese', 'peppers', 'beans', 'corn']
  newNames = {}
  constructor(private foodService:FoodService) { }

  ngOnInit(): void {
    this.ingredients = this.foodService.getIngredients('pizza');
    for (let name of this.names){
      if (this.ingredients[name] == 0){
        this.newNames[name] = false
      } else {
        this.newNames[name] = true
      }
      
    }
}}
 

Дочерний компонент .html:

 <button class="button" [ngClass]='{"is-success": active===false }' (click)='ingredientOnClick(ingredientName)'>
    {{ingredientName}} {{active ? 'yes' : 'no'}}
</button>
 

эта проверка {{активна? ‘yes’: ‘no’}} также показывает неверный вывод

Дочерний компонент .ts:

 export class ControlerComponent {
  @Input() ingredientName:string
  @Input() active = false

}
 

Комментарии:

1. Вместо того, чтобы передавать значение дочернему компоненту, например, active=»{{Новые имена [имя]}}», выполните [active]=’Новые имена [имя]’ и проверьте, работает ли это. Также попробуйте не использовать ‘===’

2. Да, так оно и было. Спасибо. Так в чем же на самом деле разница между [active]= и active=?

3. [ ] используется для привязки данных от источника к представлению.

4. Вы можете принять приведенный ниже ответ, чтобы от сообщества StackOverflow не требовалось дополнительных ответов.

Ответ №1:

Вместо того, чтобы передавать значение дочернему компоненту, например, active=»{{Новые имена [имя]}}», сделайте [active]=’Новые имена [имя]