我正在编写一个程序,试图在其中创建服务并在服务中声明一个变量,然后在服务中创建get()方法以通过从组件调用service方法来打印变量,但我却未定义。为什么?
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
}
}
<app-comp1></app-comp1>
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();
}
}
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);
}
}
答案 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