前端筆記Vue項目day3(八)

  • 實現組件更新數據功能 上
    將輸入框中的默認數據動態渲染出來
    輸入框失去焦點的時候 更改商品的數量
    子組件中不推薦操作數據 把這些數據傳遞給父組件 讓父組件處理這些數據
    父組件中接收子組件傳遞過來的數據並處理
    [mw_shl_code=applescript,true]<div id="app">
    <div class="container">
    <my-cart></my-cart>
    </div>
    </div>
    <script type="text/javascript" src="js/vue.js"></script>
    <script type="text/javascript">

    var CartTitle = {
    props: ['uname'],
    template: <br/>&lt;div class="title"&gt;{{uname}}的商品&lt;/div&gt;<br/>
    }
    var CartList = {
    props: ['list'],
    template: `
    <div>
    <div :key='item.id' v-for='item in list' class="item">
    <img :src="item.img"/>
    <div class="name">{{item.name}}</div>
    <div class="change">
    <a href="">-</a>

    1. 將輸入框中的默認數據動態渲染出來

                            # 2. 輸入框失去焦點的時候 更改商品的數量  需要將當前商品的id 傳遞過來
          <input type="text" class="num" :value='item.num' @blur='changeNum(item.id, $event)'/>
          <a href="">+</a>
        </div>
        <div class="del" @click='del(item.id)'>×</div>
      </div>
    </div>

    `,
    methods: {
    changeNum: function(id, event){

    3 子組件中不推薦操作數據 因爲別的組件可能也引用了這些數據

      #  把這些數據傳遞給父組件 讓父組件處理這些數據
      this.$emit('change-num', {
        id: id,
        num: event.target.value
      });
    },
    del: function(id){
      // 把id傳遞給父組件
      this.$emit('cart-del', id);
    }

    }
    }
    var CartTotal = {
    props: ['list'],
    template: <br/>&lt;div class="total"&gt;<br/>&lt;span&gt;總價:{{total}}&lt;/span&gt;<br/>&lt;button&gt;結算&lt;/button&gt;<br/>&lt;/div&gt;<br/>,
    computed: {
    total: function() {
    // 計算商品的總價
    var t = 0;
    this.list.forEach(item => {
    t += item.price * item.num;
    });
    return t;
    }
    }
    }
    Vue.component('my-cart',{
    data: function() {
    return {
    uname: '張三',
    list: [{
    id: 1,
    name: 'TCL彩電',
    price: 1000,
    num: 1,
    img: 'img/a.jpg'
    }]
    },
    template: `[/mw_shl_code][mw_shl_code=applescript,true] <div class='cart'> <cart-title :uname='uname'></cart-title>

    4 父組件中接收子組件傳遞過來的數據

      <cart-list :list='list' @change-num='changeNum($event)' @cart-del='delCart($event)'></cart-list>
      <cart-total :list='list'></cart-total>
    </div>

    `,
    components: {
    'cart-title': CartTitle,
    'cart-list': CartList,
    'cart-total': CartTotal
    },
    methods: {
    changeNum: function(val) {
    //4.1 根據子組件傳遞過來的數據,跟新list中對應的數據
    this.list.some(item=>{
    if(item.id == val.id) {
    item.num = val.num;
    // 終止遍歷
    return true;
    }
    });
    },
    delCart: function(id) {
    // 根據id刪除list中對應的數據
    // 1、找到id所對應數據的索引
    var index = this.list.findIndex(item=>{
    return item.id == id;
    });
    // 2、根據索引刪除對應數據
    this.list.splice(index, 1);
    }
    }
    });
    var vm = new Vue({
    el: '#app',
    data: {

    }
    });

    </script>[/mw_shl_code]

  • 發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章