[Vue]购物车案例(一)

158 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

购物车案例——实现组件化布局

  • 把静态页面转换成组件化模式
  • 把组件渲染到页面上

这个案例主要是对组件化知识的应用,对如何注册组件、父子组件间相互传递数据等进行了一个实践。

通过父组件向子组件传递数据的方式,在父组件定义数据,然后将用户的动态名传递给子组件,在子组件中通过props属性来接收数据。

html 代码结构

 <div id="app">
    <div class="container">
      <!-- 把组件渲染到页面上 --> 
      <my-cart></my-cart>
    </div>
  </div>

js 代码结构

  <script type="text/javascript" src="js/vue.js"></script>
  <script type="text/javascript">
      code in here
  </script>

1、 把静态页面转换成组件化模式

1.1 标题组件

 var CartTitle = {
      template: `
        <div class="title">我的商品</div>
      `
    }

1.2 商品列表组件

注意点 : 组件模板必须是单个根元素

var CartList = {
      template: `
        <div>
          <div class="item">
            <img src="img/a.jpg"/>
            <div class="name"></div>
            <div class="change">
              <a href="">-</a>
              <input type="text" class="num" />
              <a href="">+</a>
            </div>
            <div class="del">×</div>
          </div>
          <div class="item">
            <img src="img/b.jpg"/>
            <div class="name"></div>
            <div class="change">
              <a href="">-</a>
              <input type="text" class="num" />
              <a href="">+</a>
            </div>
            <div class="del">×</div>
          </div>
          <div class="item">
            <img src="img/c.jpg"/>
            <div class="name"></div>
            <div class="change">
              <a href="">-</a>
              <input type="text" class="num" />
              <a href="">+</a>
            </div>
            <div class="del">×</div>
          </div>
          <div class="item">
            <img src="img/d.jpg"/>
            <div class="name"></div>
            <div class="change">
              <a href="">-</a>
              <input type="text" class="num" />
              <a href="">+</a>
            </div>
            <div class="del">×</div>
          </div>
          <div class="item">
            <img src="img/e.jpg"/>
            <div class="name"></div>
            <div class="change">
              <a href="">-</a>
              <input type="text" class="num" />
              <a href="">+</a>
            </div>
            <div class="del">×</div>
          </div>
        </div>
      `
    }

1.3 商品结算组件

   var CartTotal = {
      template: `
        <div class="total">
          <span>总价:123</span>
          <button>结算</button>
        </div>
      `
    }

1.4 定义一个全局组件 my-cart

1.5 注册子组件

1.6 引入子组件

 Vue.component('my-cart',{
      ##  1.6 引入子组件  
      template: `
        <div class='cart'>
          <cart-title></cart-title>
          <cart-list></cart-list>
          <cart-total></cart-total>
        </div>
      `,
      # 1.5  注册子组件   
      components: {
        'cart-title': CartTitle,
        'cart-list': CartList,
        'cart-total': CartTotal
      }
    });
    var vm = new Vue({
      el: '#app',
      data: {

      }
    });