Angular - TS2322:类型“字符串”不可分配给类型“布尔”

Sal*_*man 15 primeng angular

我对二进制有问题,即使添加括号也是如此。

我正在使用 primeNG 库。

在 HTML 文件中我写了这段代码:

<div class="products-page">
    <div class="p-grid">
      <div class="p-col-3" *ngIf="!isCategoryPage">
        <h4>Categories</h4>
        <div class="p-field-checkbox" *ngFor="let category of categories">
          <p-checkbox
            [(ngModel)]="category.checked"
            binary="true"
            [inputId]="category.id"
            (onChange)="categoryFilter()"
          ></p-checkbox>
          <label for="{{ category.id }}">{{ category.name }}</label>
        </div>
      </div>
      <div [ngClass]="{ 'p-col-9': !isCategoryPage, 'p-col-12': isCategoryPage }">
        <div class="p-grid" *ngIf="products">
          <div
            [ngClass]="{ 'p-col-4': !isCategoryPage, 'p-col-3': isCategoryPage }"
            *ngFor="let product of products"
          >
            <products-product-item [product]="product"></products-product-item>
          </div>
        </div>
      </div>
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

,,,,

在.ts文件中:

import { Component, OnInit } from '@angular/core';
import { Product, Category } from '@bluebits/products';
import { ProductsService } from '../../services/products.service';
import { CategoriesService } from '../../services/categories.service';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'products-list',
  templateUrl: './products-list.component.html'
})
export class ProductsListComponent implements OnInit {

  products: Product[] = [];
  categories: Category[] = [];
  isCategoryPage: boolean;

  constructor(
    private prodService: ProductsService,
    private catService: CategoriesService,
    private route: ActivatedRoute
    ) { }

  ngOnInit(): void {
    this.route.params.subscribe((params) => {
      params.categoryid ? this._getProducts([params.categoryid]) : this._getProducts();
      params.categoryid ? (this.isCategoryPage = true) : (this.isCategoryPage = false);
    });
    this._getCategories();
  }

  private _getProducts(categoriesFilter?: string[]) {
    this.prodService.getProducts(categoriesFilter).subscribe((resProducts) => {
      this.products = resProducts;
    });
  }

  private _getCategories() {
    this.catService.getCategories().subscribe(
      (resCats) => {
        this.categories = resCats;
      }
    )
  }

  categoryFilter() {
    const selectedCategories = this.categories
      .filter((category) => category.checked)
      .map((category) => category.id);

    this._getProducts(selectedCategories);
  }
}
Run Code Online (Sandbox Code Playgroud)

在模块文件中:

我导入这个模块

import { CheckboxModule } from 'primeng/checkbox';
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

错误 TS2322:类型“字符串”无法分配给类型“布尔”。

二进制=“真”

我该如何修复它?

All*_*uan 35

当您这样做时binary="true",您将一个字符串分配给需要布尔值的属性。要传递true布尔值而不是"true"字符串,您必须使用括号语法:

<p-checkbox [binary]="true" [(ngModel)]="checked"></p-checkbox>
Run Code Online (Sandbox Code Playgroud)


Cra*_*rer 9

Angular CDK 有一个有用的概念@Input(),即将s声明BooleanInput为而不是boolean。这允许myProp="true"除 之外的工作[myProp]=true

coerceBooleanProperty函数确保输入值是布尔值。