【问题标题】:injected service not executing correctly despite being provided at module level angular 4尽管在模块级别 Angular 4 提供了注入服务,但仍无法正确执行
【发布时间】:2026-01-31 07:25:02
【问题描述】:

我有一个服务叫VenueAdminInceptionService

import {Subject} from 'rxjs/Subject';
import {Observable} from "rxjs/Observable";
import {VenueAdminInceptionModel} from '../../models/venueadmininceptionmodel/venueadmin.inception.model';

export class VenueAdminInceptionService{

  //pk and url service
  private pkurlsend = new Subject<VenueAdminInceptionModel>();

  sendurlpk(payload: VenueAdminInceptionModel){
    this.pkurlsend.next(payload);
  }

  receiveurlpk(): Observable<VenueAdminInceptionModel>{
    return this.pkurlsend.asObservable();
  }
}

它被注入到应用模块中

import {VenueAdminInceptionService} from './services/venueadmin/venueadmin.inception.service';
providers: [VenueService, ModalToggleService, VenueAdminInceptionService],

该服务在我的路由中以下列方式使用。

使用VenueadminactualComponent being the observeable with venueprofileComponent,venueadmincateringComponent,VenuecreatededitComponent,VenueroomadminpageComponent,VenueadminsocialmediaComponent`

成为观察者。

VenueadminactualComponent 中 observable 中的代码:

constructor(private route: ActivatedRoute, private inceptionservice: VenueAdminInceptionService) { }

  ngOnInit() {
    this.inceptedroute = this.route.snapshot.url[0].path;
    if(this.inceptedroute === 'venue-admin'){
      this.permission = 'venue';
    }
    if(this.inceptedroute === 'suits-venue-admin'){
      this.permission = 'suits';
    }

    const payload = {
      pk: this.route.snapshot.params.pk,
      permission: this.permission,
    };
    this.inceptionservice.sendurlpk(payload);

  }

然后每个 observable 都被订阅。

constructor(private inceptionservice: VenueAdminInceptionService) { }

  ngOnInit() {
    this.inceptionservicevar = this.inceptionservice.receiveurlpk()
      .subscribe(
        (incep: VenueAdminInceptionModel) => {
          this.permission = incep.permission;
          this.venueid = incep.pk;
        }
      );
    console.log(this.permission);
    console.log(this.venueid);
  }

  ngOnDestroy(){
    this.inceptionservicevar.unsubscribe();

  }

控制台日志为空白。这让我觉得什么都没有通过。

我认为这可能是我的应用程序架构,但这就是我提供服务应用程序模块的原因。

路由,以防万一,虽然我看不到如何,但如下:

{path: 'venue-admin/:pk', component: VenueadminactualComponent,
    children:[
      {path: 'profile', component: VenueprofileComponent },
      {path: 'catering', component: VenueadmincateringComponent},
      {path: 'venuepage', component: VenuecreateeditComponent},
      {path: 'room', component: VenueroomadminpageComponent},
      {path: 'socialmedia', component: VenueadminsocialmediaComponent},
    ]},

请帮忙! Punch and Pie 等着你!

【问题讨论】:

    标签: angular service observable subject angular-providers


    【解决方案1】:

    日志需要在订阅的响应中:

    ngOnInit() {
        this.inceptionservicevar = this.inceptionservice.receiveurlpk()
          .subscribe(
            (incep: VenueAdminInceptionModel) => {
              this.permission = incep.permission;
              this.venueid = incep.pk;
              console.log(this.permission);
              console.log(this.venueid);
            }
          );        
      }
    

    否则它们会在订阅返回数据之前运行(因为订阅是异步发生的)。

    【讨论】:

      最近更新 更多