// 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并将更改值传递给新字段,但没有值呈现到屏幕上。
1条答案
按热度按时间mwkjh3gx1#
我已经找到了可能的原因,我已经用sass初始化了应用程序,然后不得不改回css,但手动操作。这可能会导致渲染错误,并且可能与sass有关。
在重新创建一个干净的Angular 项目后,我可以看到父值是从子组件渲染的。