前端筆記Vue項目day3(五)

作用域插槽
父組件對子組件加工處理
既可以複用子組件的slot,又可以使slot內容不一致
[mw_shl_code=applescript,true]<div id="app">
<!--
1、當我們希望li 的樣式由外部使用組件的地方定義,因爲可能有多種地方要使用該組件,
但樣式希望不一樣 這個時候我們需要使用作用域插槽

    -->  
<fruit-list :list='list'>
   <!-- 2、 父組件中使用了<template>元素,而且包含scope="slotProps",
                    slotProps在這裏只是臨時變量   
            --->         
  <template slot-scope='slotProps'>
    <strong v-if='slotProps.info.id==3' class="current">
        {{slotProps.info.name}}                         
     </strong>
    <span v-else>{{slotProps.info.name}}</span>
  </template>
</fruit-list>

</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
/
作用域插槽
/
Vue.component('fruit-list', {
props: ['list'],
template: `
<div>
<li :key='item.id' v-for='item in list'>

3、 在子組件模板中,<slot>元素上有一個類似props傳遞數據給組件的寫法msg="xxx",

                    ###   插槽可以提供一個默認內容,如果如果父組件沒有爲這個插槽提供了內容,會顯示默認的內容。
                                    如果父組件爲這個插槽提供了內容,則默認的內容會被替換掉
        <slot :info='item'>{{item.name}}</slot>
      </li>
    </div>
  `
});
var vm = new Vue({
  el: '#app',
  data: {
    list: [{
      id: 1,
      name: 'apple'
    },{
      id: 2,
      name: 'orange'
    },{
      id: 3,
      name: 'banana'
    }]
  }
});

</script>
</body>
</html>
[/mw_shl_code]
購物車案例1. 實現組件化佈局
把靜態頁面轉換成組件化模式
把組件渲染到頁面上
[mw_shl_code=applescript,true]<div id="app">
<div class="container">
<!-- 2、把組件渲染到頁面上 -->
<my-cart></my-cart>
</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">

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
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: {

  }
});

</script>

[/mw_shl_code]

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