理解vue中的scope的使用

匿名 (未验证) 提交于 2019-12-03 00:36:02

我们都知道vue slot插槽可以传递任何属性或html元素,但是在调用组件的页面中我们可以使用 template scope="props"来获取插槽上的属性值,获取到的值是一个对象。
注意:scope="它可以取任意字符串";
上面已经说了 scope获取到的是一个对象,是什么意思呢?我们先来看一个简单的demo就可以明白了~
如下模板页面:

<!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 代码如下:

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

上面代码我们注册了一个叫 tb-list 这么一个组件,然后给 tb-list 传递了一个data属性值;该值是一个数组,如下值:

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

tb-list组件模板页面是如下:

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

遍历data属性值,然后使用slot来接收 tb-list组件中的任何内容;其内容如下:

<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的值是如下一个对象:

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

因为遍历了二次,因此还有一个是如下对象;

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

从上面返回的scope属性值我们可以看到,scope返回的值是slot标签上返回的所有属性值,并且是一个对象的形式保存起来,该slot有两个属性,一个是row,另一个是index": "index索引"}; 其中item就是data里面的一个个对象。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!