angular 5 如何在observable service中传递对象类型?

How to pass the object type in observable service in angular 5?

我想使用 BehaviorSubject 变量和 asObservable 方法传递一个对象。

所以在共享 crud.service.ts 文件中我声明了这个

private selected_element = new BehaviorSubject<any>({});
selected_element_message = this.selected_element.asObservable();
changeselectedElement(status: {}) {
    this.selected_element.next(status);
    console.log("just selected this object",status);
    // here also I can also log the status object and it looks like this
    /*
    { 
        S.No:3
        metalid:"74"
        metalname:"Vfvfvfv"
        shortname:"Fvfvfv"
        __proto__: Object
    }   */
}

在我从前端接收对象的一个​​组件中,我在构造函数中调用它。

public dataService:CrudService

当我收到对象时,我是这样推的。

this.dataService.changeselectedElement(ddata);
// here I can log the ddata and it looks like this. 

    /*
    { 
        S.No:3
        metalid:"74"
        metalname:"Vfvfvfv"
        shortname:"Fvfvfv"
        __proto__: Object
    }   */

其中 ddata 类型是具有键和值的简单对象。

在另一个组件上,我想通过订阅服务来接收这样的对象,

selected_element:any={};
 this.dataService.selected_element_message.subscribe(message => { 
 this.selected_element = message;

   console.log("Got the selected element", this.selected_element);
   // here I got the selected element as undefined...!
});

但是我得到的元素是未定义的,早些时候我使用了上面相同的代码来传递数组并且使用它工作得很好。

 private last_add_status = new BehaviorSubject<array>([]);
  last_add_status_message = this.last_add_status.asObservable();
  changelastAddStatus(status: array) {
    this.last_add_status.next(status)
    console.log("just added this array",status);
  }

我的错误在哪里?

在这里它完美地工作,也许是关于你在哪里声明你的服务(你应该在 app.module 上做):

live example

app.module

@NgModule({
  ...
  declarations: [ AppComponent, AnotherComponent ],
  providers: [ CrudService ],
  ...
})