Vue JS数据无法循环

时间:2019-07-27 07:44:57

标签: javascript laravel vue.js vuejs2

我正在使用laravel session和vue js来制作购物车系统。我的Vue JS代码部分如下。首先我循环了产品,然后使用click event将产品发送到端点,实际上是在购物车/会话中。 我的vue js代码部分如下。

  var Product  = require('../app/models/products');
  var Purchase  = require('../app/models/purchase');
  var PurchaseItem   = require('../app/models/purchaseItem');
  var dates=  new Date();

    var set = {

          supId : req.body.supId,
          GrandTotalAmnt : req.body.GrandTotalAmnt,
          SgstTotalAmnt: req.body.SgstTotalAmnt,
          CgstTotalAmnt: req.body.CgstTotalAmnt,
          IgstTotalAmnt: req.body.IgstTotalAmnt,
          FinalTotalAmnt : req.body.FinalTotalAmnt,
          TotalDecimalAmnt : req.body.TotalDecimalAmnt,
          EditAmount : req.body.EditAmount,
          invoiceNo : req.body.invoiceNo,
          voucherNo : req.body.voucherNo,
          SupDate : req.body.SupDate,
          orderId : req.body.orderId,
          purchaseStatus : "0",
          datetime     : strDate

      };

        var purchase = new Purchase(set);

      purchase.save(set, function (err, doc) {

      for(var n = 0; n < req.body.partId.length; n++){

          var sets = {           

                purchaseId : doc._id, 
                partId : req.body.partId[n],
                SellPrice : req.body.SellPrice[n],
                TotalAmnt : req.body.TotalAmnt[n],
                Tax : req.body.Tax[n],
                Discount : req.body.Discount[n],
                Quantity  : req.body.Quantity[n],
                Price   : req.body.Price[n],
                Per : req.body.Per[n],
                DiscountAmnt : req.body.DiscountAmnt[n],
                Sgst: req.body.Sgst[n],
                Cgst: req.body.Cgst[n],
                Igst: req.body.Igst[n],
                TotalAmntData : req.body.TotalAmntData[n],
                purchaseStatus : "0",
                datetime : strDate

            };

              var purchaseItem = new PurchaseItem(sets);

                  purchaseItem.save(sets, function (err, docss) {

              });

              var deductqty = [];
              var leftqty = [];
              var stkkqty = [];

              var quantityss = req.body.Quantity[n];

              console.log("quantityss 1st time " + quantityss); // there is 2 quntity 2 & 3

          Product.find({_id:req.body.partId[n]}, function (err, product) {

            console.log("quantityss 2nd time " + quantityss+","+n); // 2nd time i got 3 & 3 not 2 & 3 


              for(var f = 0; f < product.length; f++){

                  stkkqty = product[f].stkQty;// product table quantity 

                  console.log("quantityss 4 th time " + quantityss);

                  leftqty = parseInt(stkkqty) + parseInt(quantityss);

                  console.log("leftqty " + leftqty); 

                    Product.update({ partId:product[f].partId }, { $set: { stkQty  : leftqty}}, function (err, doc) {
                            console.log(doc);        
                  });  

              }

            });

          console.log("quantityss 3rd time " + quantityss); //here i get right response 2 & 3 

          }

        return res.redirect('purchase');

      });

    }); 

<div v-for="product in products">
      <div class="card" >
        <div class="card-header">{{product. name}}</div>
        <div class="col-md-4">
            <div class="card-body">
                    <img :src="product.image">
                    <p>{{product.price}}</p>
                    <p>{{product.category_id}}</p>
                </div>
                <button class="btn btn-primary" @click="addProductToCart(product)">Add to cart</button>
            </div>
        </div>        
    </div>

现在我的控制器是

export default {

    data:function(){
        return {
            lists:[]// everything is pushed in lists array
        }


methods:{
        addProductToCart(product){
           // alert(product)
            axios.get('/cart',{
                 params: {
                    product: product
                }
            }).then((response) => {
        });

mounted:{
  axios.get('/list')
            .then(function (resp) {
                console.log(resp)
                app.lists=resp.data
            })}

我也看到了以下列格式存储的数据

public function StoreInCart(Request $request) {
        //dd($request->get('product'));
         $request->session()->push('product',$request->product);
         return session('product');

    }
    public function listProduct(Request $request){
        $product = $request->session()->get('product');
        return $product;
    }

由于上述格式,我无法循环数据

lists:Array[7]
0:"{"id":1,"name":"Keyshawn McDermott Sr.","description":"Error aut quia id dolorem est aut doloribus nesciunt. Quod nihil tenetur ea id voluptas molestias id. Debitis amet dolor est fugiat sed autem.","category_id":1,"price":59,"image":"http://loremflickr.com/400/300?random=36","created_at":"2019-07-16 10:12:27","updated_at":"2019-07-16 10:12:27"}"
1:"{"id":2,"name":"Marlene Reichert","description":"Debitis asperiores sed sit assumenda unde quo natus. Consequatur est labore tenetur quae. Eius distinctio ea omnis aspernatur porro earum quae.","category_id":3,"price":76,"image":"http://loremflickr.com/400/300?random=71","created_at":"2019-07-16 10:12:27","updated_at":"2019-07-16 10:12:27"}"
2:"{"id":1,"name":"Keyshawn McDermott Sr.","description":"Error aut quia id dolorem est aut doloribus nesciunt. Quod nihil tenetur ea id voluptas molestias id. Debitis amet dolor est fugiat sed autem.","category_id":1,"price":59,"image":"http://loremflickr.com/400/300?random=36","created_at":"2019-07-16 10:12:27","updated_at":"2019-07-16 10:12:27"}"
3:"{"id":1,"name":"Keyshawn McDermott Sr.","description":"Error aut quia id dolorem est aut doloribus nesciunt. Quod nihil tenetur ea id voluptas molestias id. Debitis amet dolor est fugiat sed autem.","category_id":1,"price":59,"image":"http://loremflickr.com/400/300?random=36","created_at":"2019-07-16 10:12:27","updated_at":"2019-07-16 10:12:27"}"
4:"{"id":2,"name":"Marlene Reichert","description":"Debitis asperiores sed sit assumenda unde quo natus. Consequatur est labore tenetur quae. Eius distinctio ea omnis aspernatur porro earum quae.","category_id":3,"price":76,"image":"http://loremflickr.com/400/300?random=71","created_at":"2019-07-16 10:12:27","updated_at":"2019-07-16 10:12:27"}"
5:"{"id":18,"name":"Heidi Kuhlman","description":"Eveniet et dolorum aut magnam ut amet reprehenderit eveniet. Nihil incidunt voluptas aut amet et.","category_id":7,"price":274,"image":"http://loremflickr.com/400/300?random=2","created_at":"2019-07-16 10:12:27","updated_at":"2019-07-16 10:12:27"}"

在循环列表上,我什么也没得到。 请帮我。如何循环存储在列表数组中的数据。

4 个答案:

答案 0 :(得分:0)

您需要将产品详细信息另存为json对象(在您的情况下为json strstr,而不是json对象)。

按如下所示更改控制器的推送功能:

$request->session()->push('product',json_decode($request->product));

完整代码:

public function StoreInCart(Request $request) {
    //dd($request->get('product'));

     #changes done on next line
     $request->session()->push('product',json_decode($request->product));

     return session('product');

}
public function listProduct(Request $request){
    $product = $request->session()->get('product');
    return $product;
}

答案 1 :(得分:0)

Samir Mammadhasanov给出的答案可能是一个更好的选择,但是如果您想像您提到的那样循环数组,则可以像这样简单地解析它:

    <div class="card-body" v-for="list in lists">
       {{JSON.parse(list).name}}
    </div>

答案 2 :(得分:0)

您需要JSON.parse()列表中的项目。正如其他人提到的那样,这些是JSON字符串,尚未解析对象。

您可能要考虑为每个列表项创建一个子组件,然后创建一个计算属性,该属性返回如下所示的解析对象:

parsedObject() {
    return JSON.parse(this.jsonString);
}

答案 3 :(得分:0)

不是您问题的答案,但是在看到刀片代码后,我建议您在Vue js列表渲染中使用key属性。

<div v-for="product in products" :key="product.id">
      <div class="card" >
        <div class="card-header">{{product. name}}</div>
        <div class="col-md-4">
            <div class="card-body">
                    <img :src="product.image">
                    <p>{{product.price}}</p>
                    <p>{{product.category_id}}</p>
                </div>
                <button class="btn btn-primary" @click="addProductToCart(product)">Add to cart</button>
            </div>
        </div>        
    </div>

OR

 <div v-for="(product,index) in products" :key="index">
          <div class="card" >
            <div class="card-header">{{product. name}}</div>
            <div class="col-md-4">
                <div class="card-body">
                        <img :src="product.image">
                        <p>{{product.price}}</p>
                        <p>{{product.category_id}}</p>
                    </div>
                    <button class="btn btn-primary" @click="addProductToCart(product)">Add to cart</button>
                </div>
            </div>        
        </div>

来自Vue文档:

在对象上进行迭代时,该顺序基于Object.keys()的枚举顺序,这不能保证在JavaScript引擎实现中是一致的。 https://vuejs.org/v2/guide/list.html