Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每次创建服务-角度_Javascript_Html_Css_Angular_Typescript - Fatal编程技术网

Javascript 每次创建服务-角度

Javascript 每次创建服务-角度,javascript,html,css,angular,typescript,Javascript,Html,Css,Angular,Typescript,我只想创建一次服务 我的服务被注入到两个组件中,我将该值设置为true。 问题是,服务总是在我与他一起打开视图时创建的,并且我的值再次默认为false。 如何让它成为单身 import {Injectable} from '@angular/core'; @Injectable({ providedIn: 'root' }) export class GlobalStateService { constructor() { console.log('GlobalState c

我只想创建一次服务

我的服务被注入到两个组件中,我将该值设置为true。 问题是,服务总是在我与他一起打开视图时创建的,并且我的值再次默认为false。 如何让它成为单身

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

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

  constructor() {
    console.log('GlobalState created');
  }

  myValue = false;
}
我是这样用的:

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

  model: any = {};
  permission: any;

  constructor(public authService: AuthService,
              private alertifyService: AlertifyService,
              private globalState: GlobalStateService) {
  }
模块:

import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {HttpClientModule} from '@angular/common/http';
import {FormsModule} from '@angular/forms';

import {AppComponent} from './app.component';
import {NavComponent} from './nav/nav.component';
import {AuthService} from './_services/auth.service';
import {HomeComponent} from './home/home.component';
import {RegisterComponent} from './register/register.component';
import {AlertifyService} from './_services/alertify.service';
import { SettingsComponent } from './settings/settings.component';
import { BooksComponent } from './books/books.component';
import { UsersComponent } from './users/users.component';
import { GlobalStateService } from './_services/global-state.service';
import { StoreModule } from '@ngrx/store';
import { changeTabReducer } from './reducers/tab.reducer';

@NgModule({
  declarations: [
    AppComponent,
    NavComponent,
    HomeComponent,
    RegisterComponent,
    SettingsComponent,
    BooksComponent,
    UsersComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    FormsModule
  ],
  providers: [
    AuthService,
    AlertifyService,
    GlobalStateService
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

有两种方法可以使服务成为Angular中的单例服务:

  • 声明应在应用程序根目录中提供服务
  • 将服务包括在AppModule中或仅限于 由AppModule导入
  • 从文件上看,是什么?您需要在服务的@Injectable decorator中指定它应该在“root”中提供

    import { Injectable } from '@angular/core';
    
    @Injectable({
      providedIn: 'root',
    })
    export class GlobalStateService {
    }
    

    基于代码,这看起来不错,但是注意:用
    @Injectable({providedIn:'root'})装饰它
    不在任何提供者数组中提供它。

    如果依赖项注入正确实现,它应该只向组件注入服务的单个实例。如果这种情况没有发生,可能是由于错误的实现。你能包括使用你的服务的模块和组件的代码吗?我补充说,这很好吗?或者更多?你能添加整个导航组件(如服务使用的地方)和服务使用的第二个组件,并像我一样通过构造函数将其注入到每个服务中吗?好吧,它现在不起作用检查,我补充说,在提供者下移动GlobalStateService,它应该像我在评论中提到的那样起作用没有它就不起作用,我现在添加了它,但也不起作用。每次新建时都会创建服务