代码之家  ›  专栏  ›  技术社区  ›  corry

通过服务将数据从TS类发送到角度组件

  •  0
  • corry  · 技术社区  · 5 年前

    在角度项目之外,还有一个ts类,我正试图从该类通过服务将对象发送到角度组件。

    sender.ts 是使用角度服务发送对象的ts类;

    export class Sender {
    
      injector;
      servicePointer;
      myData: Object;
    
      constructor() {
    
        this.injector = Injector.create({
          providers: [
            {
              provide: ShareDataService,
              deps: []
            },
          ]
        });
    
        this.servicePointer = this.injector.get(ShareDataService);
      }
    
      public send() {
        this.myData = {
          name: "Robert",
          visible: true
        }
    
        return this.servicePointer.dataVisibility(this.myData);
      }
    }
    

    share-data.service.ts 是一个角度服务,它成功地从 发件人.ts 班级:

    @Injectable({
      providedIn: 'root'
    })
    export class ShareDataService {
    
      changeDataSource = new BehaviorSubject<Object>({});
    
      public dataUpdate$ = this.changeDataSource.asObservable();
    
      public dataVisibility = (dataInfo: Object) => {
        //console.log(dataInfo);
        this.changeDataSource.next(dataInfo);
      }
    }
    

    app.component.ts 包括 Sender TS类和调用 .send() 方法:

    export class AppComponent implements OnInit {
      private foo:Sender.Sender = new Sender.Sender();
    
      constructor() {}
    
      ngOnInit() {
        this.foo.send();
      }
    }
    

    至少,有一个 receive 订阅服务的组件:

    export class ReceiverComponent implements OnInit {
      constructor(private shareDataService: ShareDataService) { }
    
      receivedData;
    
      ngOnInit() {
        this.shareDataService.dataUpdate$.subscribe(success => {
          this.receivedData = success;
          console.log(this.receivedData);
        })
      }
    } 
    

    并且总是从服务返回空对象,尽管带有数据的对象会到达服务(console.log(datainfo))。

    是什么导致了这个问题?在 service

    @Injectable({
       providedIn: 'root'
    })
    

    具有根应用程序注入器和 sender 类中还提供了一个来自服务的注入器。这可能是问题所在吗?如果是,是否有其他方法注入服务? 还有一个 stackblitz 上面解释了代码。

    0 回复  |  直到 5 年前