首页 > 其他分享 >理解vue中的scope的使用

理解vue中的scope的使用

时间:2023-01-27 02:22:06浏览次数:45  
标签:vue name age sex 理解 scope data row

我们都知道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: 'echohye',
                            age: '23',
                            sex: 'man'
                        },
                        {
                            name: 'echowjd',
                            age: '22',
                            sex: 'woman'
                        }
                    ]
                }
            }
        });
    </script>
</body>
</html>
Vue.component('tb-list', {
  template: '#tb-list',
  props: {
    data: {
      type: Array,
      required: true
    }
  },
  data() {
    return {

    }
  }
});

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

该值是一个数组,如下值:

data: [
  {
    name: 'echohye',
    age: '23',
    sex: 'man'
  }, 
  {
    name: 'echowjd',
    age: '22',
    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">
    <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":"echohye","age":"23","sex":"man"},"$index":0}

遍历の第二次,输出如下对象:

{"row":{"name":"echowjd","age":"22","sex":"woman"},"$index":1}

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

标签:vue,name,age,sex,理解,scope,data,row
From: https://www.cnblogs.com/echohye/p/17068472.html

相关文章

  • vue路由
    视频链接:https://www.bilibili.com/video/BV1Zy4y1K7SH?p=118什么是vue路由?答:概念是这么说的嗷:路由的本质就是一种对应关系,比如说url地址和资源之间的对应关系。我来简......
  • 尚硅谷vue笔记
    尚硅谷vue笔记:https://blog.csdn.net/m0_56428225/article/details/125702306?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-0-......
  • 超级详细的vue2学习笔记
    超级详细的vue2学习笔记:https://blog.csdn.net/weixin_47994845/article/details/123603221?spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-b......
  • Vue.js框架:前端转化html元素为pdf并导出
    一、安装依赖主要用到以下两个依赖:html2canvas:通过获取HTML的某个元素,然后生成Canvas,能让用户保存为图片。jspdf:基于HTML5的客户端解决方案,用于生成各种用......
  • 怎样借助WWW理解并较好地实现编程中的相关功能点
    借助WWW来学习编程知识是必须的路径,那么怎样才能够如标题那样更好地实现呢?首先我们分析一下如果你使用的是大家都了解的编程框架,组件。那么它们一定有相关的官方网站,这个......
  • 【面试题】说说你对发布订阅、观察者模式的理解?区别?
    大厂面试题分享面试题库前端面试题库(面试必备)地址:​​前端面试题库​​一、观察者模式观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有......
  • vue学习之-----移动端插件FastClick
    1、为什么要使用fastclick(1)移动端的浏览器,默认会在用户点击屏幕300ms延迟之后,才会触发点击事件【为了检查用户是否在做双击】,为了能立即响应用户的点击事件,所以有了fastcl......
  • vue3中获取ref元素的几种方式总结
    1.原生js获取dom元素:document.querySelector(选择器)document.getElementById(id选择器)document.getElementsByClassName(class选择器)2.ref获取单个dom元素:<temp......
  • vue学习之----- 图片懒加载插件【vue-lazyload】
    1、用npm安装npmivue-lazyload2、main.js中绑定到vue对象上 3、在需要懒加载的img标签上把src换成v-lazy 4、懒加载的意义:(1)显示在屏幕之外的图片不加载,图片......
  • vue2升级vue3:vue3真的需要vuex或者Pinia吗?hooks全有了
    在写 《vue2升级vue3:TypeScript下vuex-module-decorators/vuex-classtovuex4.x》,建议新项目使用 Pinia,但是我的项目部分组件希望直接打包出去给地方使用。这个时候还是......