Возникновение исключения при доступе к модам с помощью сервиса - PullRequest
0 голосов
/ 12 мая 2018

Я разделил модалы как компоненты и написал сервис, чтобы я мог использовать этот сервис и открывать модал из любого места.

Мой сервис

import { Injectable } from '@angular/core';
import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';
import { BsModalService } from 'ngx-bootstrap/modal'; 
import { LoginComponent } from './login/login.component';

@Injectable()
export class MyModalsService {
    loginModalRef: BsModalRef;
    public modalService: BsModalService;
    constructor() {
    }
    openLogin() {
        this.loginModalRef= this.modalService.show(LoginComponent);
    }
}

login.component.ts

import  { MyModalsService } from '../modals.service';
export class LoginComponent implements OnInit {
constructor(public _userService: UserService,
    private http: Http,
    public server:ServerService,
    public _otherservicesService: OtherservicesService,
    public global:GlobalService,
    public datepipe: DatePipe,
    public mymodal: MyModalsService,
    public router:Router) {}

    AfetrSuccessLogin() {
       this.mymodal.loginModalRef.hide();
    } 
}

Мне грозит следующее исключение

Uncaught Error: Can't resolve all parameters for LoginComponent: ([object Object], [object Object], [object Object], [object Object], [object Object], [object Object], ?, [object Object]).

В терминале

WARNING in Circular dependency detected:
src/app/modals.service.ts -> src/app/login/login.component.ts -> 
src/app/modals.service.ts

WARNING in Circular dependency detected:
src/app/login/login.component.ts -> 
src/app/modals.service.ts -> src/app/login/
login.component.ts

1 Ответ

0 голосов
/ 12 мая 2018

Полагаю, это неправильный способ использования сервисов в angular.Попробуйте следующее:

Ваш сервис:

import {Subjcet} from "rxjs/Subject";
export class YourService {
       private modalSubject:Subject<boolean>
       constructor(){
           this.modalSubject = new Subject();
       }

       getModalSubject(){
          return this.modalSubject;
       }

       afterSuccessLogin(){
          this.modalSubject.next(true);
       }

И в вашем компоненте

improt {YourService} from "yourServiceDirectory";

export class YourComponent{
     constructor(private myService:YourService){
         this.myService.getModalSubject().subscribe(closeMyModal => {
               if(closeMyModal){
                    //Close your modal
               }
         })
     }
}
...