理解vue中的scope的使用

理解vue中的scope的使用javascript

咱們都知道vue slot插槽能夠傳遞任何屬性或html元素,可是在調用組件的頁面中咱們能夠使用 template scope="props"來獲取插槽上的屬性值,獲取到的值是一個對象。
注意:scope="它能夠取任意字符串";
上面已經說了 scope獲取到的是一個對象,是什麼意思呢?咱們先來看一個簡單的demo就能夠明白了~
以下模板頁面:css

<!DOCTYPE html>
<html>
  <head>
    <title>Vue-scope的理解</title>
    <script src="./libs/vue.js"></script>
    <link rel="stylesheet" href="./css/index.css" />
    <script src="./js/scope.js"></script>
  </head>
  <body>
    <div id="app">
      <tb-list :data="data">
        <template scope="scope">
          <div class="info" :s="JSON.stringify(scope)">
            <p>姓名:{{scope.row.name}}</p>
            <p>年齡: {{scope.row.age}}</p>
            <p>性別: {{scope.row.sex}}</p>
            <p>索引:{{scope.$index}}</p>
          </div>
        </template>
      </tb-list>
    </div>
    <script id="tb-list" type="text/x-template">
      <ul>
        <li v-for="(item, index) in data">
          <slot :row="item" :$index="index"></slot>
        </li>
      </ul>
    </script>
    <script type="text/javascript">
      new Vue({
        el: '#app',
        data() {
          return {
            data: [
              {
                name: 'kongzhi1',
                age: '29',
                sex: 'man'
              }, 
              {
                name: 'kongzhi2',
                age: '30',
                sex: 'woman'
              }
            ]
          }
        },
        methods: {
          
        }
      });
    </script>
  </body>
</html>

js 代碼以下:html

Vue.component('tb-list', {
  template: '#tb-list',
  props: {
    data: {
      type: Array,
      required: true
    }
  },
  data() {
    return {

    }
  },
  beforeMount() {

  },
  mounted() {

  },
  methods: {
    
  }
});

上面代碼咱們註冊了一個叫 tb-list 這麼一個組件,而後給 tb-list 傳遞了一個data屬性值;該值是一個數組,以下值:vue

data: [
  {
    name: 'kongzhi1',
    age: '29',
    sex: 'man'
  }, 
  {
    name: 'kongzhi2',
    age: '30',
    sex: 'woman'
  }
]

tb-list組件模板頁面是以下:java

<ul>
  <li v-for="(item, index) in data">
    <slot :row="item" :$index="index"></slot>
  </li>
</ul>

遍歷data屬性值,而後使用slot來接收 tb-list組件中的任何內容;其內容以下:git

<template scope="scope">
  <div class="info" :s="JSON.stringify(scope)">
    <p>姓名:{{scope.row.name}}</p>
    <p>年齡: {{scope.row.age}}</p>
    <p>性別: {{scope.row.sex}}</p>
    <p>索引:{{scope.$index}}</p>
  </div>
</template>

最後在模板上使用scope來接收slot中的屬性;所以scope的值是以下一個對象:github

{"row":{"name":"kongzhi1","age":"29","sex":"man"},"$index":0}

由於遍歷了二次,所以還有一個是以下對象;數組

{"row":{"name":"kongzhi2","age":"30","sex":"woman"},"$index":1}

從上面返回的scope屬性值咱們能夠看到,scope返回的值是slot標籤上返回的全部屬性值,而且是一個對象的形式保存起來,該slot有兩個屬性,一個是row,另外一個是$index, 所以返回 {"row": item, "$index": "index索引"}; 其中item就是data裏面的一個個對象。app

最後頁面被渲染成以下頁面;
查看頁面效果;ui

相關文章
相關標籤/搜索