有没有办法保留数组元素?

时间:2019-10-29 06:58:42

标签: angular

我有一个服务,两个不同的组件可以通过不同的功能对其进行访问。

我有一个getProduct函数,无论何时从组件1调用它,它都会更新p_array

但是当我尝试通过组件2调用的另一个函数返回p_array时,该数组将返回为空。

我也试图将其声明为可观察的,并订阅它仍然没有运气 cart service

getproduct being called from component 1

c_array being subscribed in component 2

2 个答案:

答案 0 :(得分:0)

确保在根目录中提供服务,以便两个组件都获得相同的实例。在该服务的Injectable装饰器中,传入providerIn root

app.post('/search', function(req,res){

  connection.query('SELECT t.periode, COALESCE(r.r_kwh_penjualan, 0 ) as r_kwh_penjualan, COALESCE(r.r_total_pelanggan, 0 ) as r_total_pelanggan, COALESCE(r.r_total_pendapatan, 0 ) as r_total_pendapatan, t.t_total_pelanggan, t.t_kwh_penjualan, t.prediksi_pendapatan FROM realisasi AS r RIGHT JOIN  target_kinerja as t ON t.periode = r.periode WHERE r.periode LIKE "%'+req.query.key+'%" ORDER BY t.periode DESC',
  function(err,rows, fields) {
    if(err) throw err;
      var data=[];
      for(i=0;i<rows.length;i++)
      {
        data.push(rows[i].periode);
      }
      res.end(JSON.stringify(data));
  });
});

,然后确保该服务未出现在任何提供程序列表中。如果其他任何东西正在提供服务,那么您可能会在组件中得到该服务的另一个实例。

答案 1 :(得分:0)

c_array()可能存在问题,因为它每次都返回一个新的observable。因此,订阅可能会起作用。尝试以下

在您的服务中使用发射器。像下面的

export class CartService {
    arr_updated= new EventEmitter<any[]>();
    p_array: any[] = [];
    setProduct(product) { 
       this.p_array.push(product)
       this.arr_updated.emit(this.p_array);
    }
}

组件2中的订阅者

ngOnInit() {
    this.cartService.arr_updated.subscribe((res) => { 
        this.c_arr= res;
    });
} 

希望有帮助