为什么在将数据存储在变量中后,我在打字稿中变得未定义?

时间:2018-12-21 17:39:50

标签: angular typescript

我正在编写一个程序,试图在其中创建服务并在服务中声明一个变量,然后在服务中创建get()方法以通过从组件调用service方法来打印变量,但我却未定义。为什么?

AppComponent.ts

import { Component } from '@angular/core';


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})


export class AppComponent {


  }

}

AppComponent.html

<app-comp1></app-comp1>

Comp1Component.ts

import { Component, OnInit } from '@angular/core';
import { AService } from 'src/app/services/a.service';

@Component({
  selector: 'app-comp1',
  templateUrl: './comp1.component.html',
  styleUrls: ['./comp1.component.css']
})
export class Comp1Component implements OnInit {

  constructor(private aService:AService) { }

  ngOnInit() {
    this.aService.getFunc1();
  }

}

AService.ts

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class AService {

  private a;


  constructor() { }

  public func1():void
  {
    this.a=11;

  }


  public getFunc1()
  {
    console.log(this.a);
  }
}

3 个答案:

答案 0 :(得分:1)

通过此代码,您永远不会在其中调用func1(),因为永远不会分配服务中保存的变量。在getfunc()之前,您需要调用其他函数。这样吧

ngOnInit() {
    this.aService.func1() 
    this.aService.getFunc1()
} 

答案 1 :(得分:0)

确保将服务包含在模块中。 (或者,您也可以将其添加为组件的提供者。)

@NgModule({

  ...
  providers: [AService,...],
  ...
})

答案 2 :(得分:0)

假设您在该服务上获得undefined。 您必须以可注入应用程序的形式提供服务。一种方法是像这样的tomar服务:

@Injectable({
  providedIn: 'root'
})

export class AService {
//service body
}

如果服务需要在模块级别范围内,则可以更改providedIn: 'module'

了解更多有关角度文档的信息:https://angular.io/guide/providers