skip to Main Content

I am trying to read data from firebase using angular 2 and typescript

my code

export class DashboardComponent implements OnInit {
    itemsRef: AngularFireList<any>;
    items: Observable<any[]>;


      constructor(  afDatabase: AngularFireDatabase) {

        this.itemsRef = afDatabase.list('/user_orders/louro');
        this.items = this.itemsRef.valueChanges();

        this.items.subscribe(val_2 => {

         alert(val_2.keys());

            val_2.forEach(function (value2) {
            {

                Object.keys(value2).forEach(function(k2) {
                 {

                     // k is key
                     let count = Object.keys( (value2[k2] )).length;
                     console.log("New order key "+k2);

                     for(let i=0;i<count;i++){
                         console.log(i+"=>  "+JSON.stringify (value2[k2][i]));

                     }

                }
            });



            }
          })
        });




      }



  ngOnInit() {
  }

} 

and on val_2 only contains

[
  {
    "-L7rtl2NesdOYVD4-bMs": [
      {
        "ads_show": false,
        "brand": "",
        "buttonLabel": "Add to cart",
        "child": "fruits",
        "decrn": "testing for demonstrate",
        "key": "-L7rtXc0pMQhi1ClK-pP",
        "mid": "fresh fruits",
        "note": "",
        "orderInfo": {
          "message": "nil",
          "methode": "cash on delivery",
          "status": "nil",
          "time": 1521356314040,
          "time2": 1521356254115
        },
        "p_id": 73,
        "p_name": "testing",
        "position": 0,
        "primary_key": "testinglouro",
        "qty": {
          "m_qty": 1,
          "qty": 23,
          "unite": "1kg",
          "user_intput_qty": 2
        },
        "quantity_new": 2,
        "querykey_shop_name_top": "louro_fruits",
        "sellerName": "louro",
        "sellonline": true,
        "seo": {
          "meta_descrption": "",
          "meta_title": ""
        },
        "service": false,
        "serviceMessage": "Please enter your complaint details",
        "serviceTitle": "Service Requesting",
        "shopname": "louro",
        "shopview": false,
        "summery": "nil",
        "tags": "",
        "top": "fruits",
        "uid": "IG2SxH6Gcabr3QVLz9jE9Wwweh62",
        "variants": [
          {
            "img_position": 0,
            "prize": {
              "mrp": 58,
              "selling_prize": 45,
              "tax": 0
            },
            "qty": {
              "m_qty": 1,
              "qty": 23,
              "unite": "1kg",
              "user_intput_qty": 2
            },
            "shipping": {
              "minmumbuy": 0,
              "s_cost": 0,
              "s_dlts": ""
            }
          }
        ],
        "variants_position": 0
      }
    ]
  }
]

And my database is enter image description here

I need this key “4X2NpohlbUa3AA7ri6iHGNm2If93” .
How to get that key ?
I tried val_2.key
but it showing error “[ts] Property ‘key’ does not exist on type ‘any[]’. Did you mean ‘keys’?”

In java i am using below code and work fine dataSnapshot1.getKey();

 FirebaseDatabase database = FirebaseDatabase.getInstance();
              DatabaseReference myRef = database.getReference(getResources().getString(R.string.user_orders)+"/"+
                      shop_name,getContext()));
              myRef.addListenerForSingleValueEvent(new ValueEventListener() {
                  @Override
                  public void onDataChange(DataSnapshot dataSnapshot) {
                      // This method is called once with the initial value and again
                      // whenever data at this location is updated.
                      //  MainAction.setDefaults("OpenCategories",dataSnapshot.toString(),getActivity());
                      if (dataSnapshot.hasChildren()) {
                          for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                              orderDetails1 = null;
                              orderDetails1 = new OrderDetails();
                              if (dataSnapshot1.hasChildren()) {
                                  int id = -1;
                                  for (DataSnapshot dataSnapshot2 : dataSnapshot1.getChildren()) {
                                      id = id + 1;
                                      if (dataSnapshot2.hasChildren()) {
                                          int productid = -1;
                                          for (DataSnapshot dataSnapshot3 : dataSnapshot2.getChildren()) {
                                              productid = productid + 1;
                                              if (dataSnapshot3.hasChildren()) {
                                                  orderDetails1.productmillaList.add(dataSnapshot3.getValue(Productmilla.class));
                                              }
                                              orderDetails1.productmillaList.get(productid).setPosition(Integer.parseInt(dataSnapshot3.getKey()));
                                              orderDetails1.productmillaList.get(productid).setId(dataSnapshot2.getKey());
                                          //    Log.d("key2",dataSnapshot2.getKey()+"  "+productid);
                                          }
                                      }

                                      //orderDetails1.productmillaList.get(id).setId(dataSnapshot2.getKey());
                                  }
                              }
                              orderDetails1.key = dataSnapshot1.getKey();
                              orderDetails.add(orderDetails1);

                          }
                          getaddress(orderDetails);
                      } else   mProgressBar.setVisibility(View.GONE);

                  }

                  @Override
                  public void onCancelled(DatabaseError error) {
                      // Failed to read value
                      mProgressBar.setVisibility(View.GONE);
                      Log.w("dd", "Failed to read value."+ error.getMessage());
                  }
              });

3

Answers


  1. In your JSON, val is an array.

    Object.keys(val[0])
    

    will give you the keys of the first element of that array, which is what you’re after.

    Login or Signup to reply.
  2. Update :

    According to the updated response data, you should access using Object.keys(val)[0] which gives the value for key "4X2NpohlbUa3AA7ri6iHGNm2If93", since it is the first key.

    According to older response data :

    Your val is an array.

    This should work.

    Object.keys(val[0]).forEach(function(k1) {
    {
        console.log("Key first : "+ k1);
    });
    
    Login or Signup to reply.
  3. TO get the first key in the Object

    Object.keys(val)[0]; //returns 'first key'
    

    [https://stackoverflow.com/a/11509718/7458082%5D%5B1%5D

    To iterate through the object

    Object.keys(obj).forEach(function(key,index) {
    // key: the name of the object key
    // index: the ordinal position of the key within the object
    });
    

    [https://stackoverflow.com/a/11509718/7458082%5D%5B1%5D

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search