typescript 子组件未呈现通过@Input传递的父值

0vvn1miw  于 2023-05-01  发布在  TypeScript
关注(0)|答案(1)|浏览(107)
// PARENT app.component.ts

import { Component, OnInit } from '@angular/core';
import { Profile } from './entity/Profile';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.sass']
})
export class AppComponent {
  title = 'personal-finance-client';
  profile : Profile = new Profile();

}
// PARENT app.component.html

<app-navbar *ngIf="profile" [profile]="profile" [title]="title" />
<div class="font-bold text-3xl">
  {{title}}
  {{profile.getName()}}
</div>
// CHILD navbar.component.html

<p>{{myTitle}}</p>
// CHILD navbar.component.ts

import { Component, Input, OnInit } from '@angular/core';
import { Profile } from '../entity/Profile';

@Component({
  selector: 'app-navbar',
  templateUrl: './navbar.component.html',
  styleUrls: ['./navbar.component.css']
})
export class NavbarComponent implements OnInit{
  private _title? : string;

  @Input()
  set title(value: string | undefined){
    this._title = value;
    if(value){
      this.myTitle = value;
    }

  }

  get title() {
    return this._title;
  }

  @Input() profile!: Profile;

  profileName: string = this.profile?.getName();
  myTitle!: string;

  ngOnInit(): void {
      alert(this.profile?.getName())
  }
}

我无法在儿童导航栏中获取我的标题。component.html文件呈现的父标题应该是'personal-finance-client'。我试过用控制台调试这个值。在导航栏的OnInit中登录。component.ts,它首先打印undefined,然后是'personal-finance-client'的实际值。
子组件似乎只接受第一个OnInit值,而当新值出现时却没有呈现?
这是正常的行为吗,因为在这种情况下,我似乎无法成功地将父值传递给子值。
我尝试使用ngOnChanges并将更改值传递给新字段,但没有值呈现到屏幕上。

mwkjh3gx

mwkjh3gx1#

我已经找到了可能的原因,我已经用sass初始化了应用程序,然后不得不改回css,但手动操作。这可能会导致渲染错误,并且可能与sass有关。
在重新创建一个干净的Angular 项目后,我可以看到父值是从子组件渲染的。

相关问题