为什么我的角度服务变量未定义?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的角度服务变量未定义?相关的知识,希望对你有一定的参考价值。

我一直试图在我的代码中将变量从一个组件转换为另一个组件,但它返回的是未定义的

我的服务

import  Injectable  from '@angular/core';

@Injectable(
  providedIn: 'root'
)
export class ColorService 

  public color : string;

  constructor()  

我的应用模块

import  BrowserModule  from '@angular/platform-browser';
import  NgModule  from '@angular/core';

import  AppComponent  from './app.component';

import  RouterModule, Routes  from '@angular/router';

import  ColorService  from './core/color.service';

import  UserComponent  from './user/user.component';
import  PublicComponent  from './public/public.component';

const routes : Routes = [
  
    path: '',
    redirectTo: 'user',
    pathMatch: 'full'
  ,
  
    path: 'user',
    component: UserComponent
  ,
  
    path: 'public',
    component: PublicComponent
  ,
  
    path: '**',
    redirectTo: 'user'
  
]

@NgModule(
  declarations: [
    AppComponent,
    UserComponent,
    PublicComponent
  ],
  imports: [
    BrowserModule,
    RouterModule.forRoot(routes)
  ],
  providers: [
    ColorService
  ],
  bootstrap: [AppComponent]
)
export class AppModule  

我的用户组件

import  Component, OnInit  from '@angular/core';
import  ColorService  from '../core/color.service';

@Component(
  selector: 'app-user',
  templateUrl: './user.component.html',
  styleUrls: ['./user.component.scss']
)
export class UserComponent implements OnInit 

  constructor(private color: ColorService)  

  ngOnInit(): void 

  

  colorit()
    this.color.color = 'blue';
    console.log(this.color.color);
  


和应该获取颜色字符串的组件

import  Component, OnInit  from '@angular/core';
import  ColorService  from '../core/color.service';

@Component(
  selector: 'app-public',
  templateUrl: './public.component.html',
  styleUrls: ['./public.component.scss']
)
export class PublicComponent implements OnInit 

  constructor(private color: ColorService)  

  ngOnInit(): void 

  

  getColor()
    console.log(this.color.color);
  


但是,每次我尝试在公共组件中获取颜色时,都会得到不确定的,甚至更坚强的颜色都包含在appModule的提供程序中

答案

为了从一个组件到另一组件进行通信,我们可以使用@Input和@Output发射器属性。

您可以按照以下方式在PublicComponent.ts文件中更新代码:

import  Component, OnInit, Input  from '@angular/core';
import  ColorService  from '../core/color.service';

@Component(
  selector: 'app-public',
  templateUrl: './public.component.html',
  styleUrls: ['./public.component.scss']
)
export class PublicComponent implements OnInit 
  private _color = '';

  constructor(private color: ColorService)  

  ngOnInit(): void 

  @Input()
  set color(color: string) 
     this._color = color || '<no name set>';
  

  getColor()
    console.log(this.color.color);
  

此外,在PublicComponent.html文件中添加以下代码行:

<app-public [color]="color.color"></app-public>

请进行以下更改,如果适合您,请告诉我。

另一答案

在组件内部,有一个名为colorinit的方法,其中该方法未在ngoninit生命周期中声明。因此,您可以确认是否从组件html调用该方法吗?

如果不是,请在生命周期挂钩中添加该方法名称

以上是关于为什么我的角度服务变量未定义?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的输入变量属性未定义(Angular)

角度 $scope 变量未在控制器中更新

拖放图片上传,角度4

角度2:组件中未更新服务变量

无法读取未定义的属性'setRoot' - 角度错误

角度分量解析值显示未定义