深入理解--VUE组件中数据的存放以及为什么组件中的data必需是函数

1、组件中数据的存放

***(重点)组件是一个单独模块的封装:这个模块有自己的HTML模板,也有data属性。

只是这个data属性必需是一个函数,而这个函数返回一个对象,这个对象里面存放着组件的数据。

    <template id="MyCpn">
        <div>
            <h2>组件数据的存放 </h2>
            <p>{{title}}</p>
        </div>
    </template>
    <script>
        Vue.component(‘cpn‘, {
            template: ‘#MyCpn‘,
            data() {
                return {
                    title: ‘我是组件中的专属数据‘
                }
            }
            // 组件是一个单独模块的封装:这个模块有自己的HTML模板,也有data数据。
        })

***完整代码***

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<div id="app">
    <cpn></cpn>
</div>

<body>
    <template id="MyCpn">
        <div>
            <h2>组件数据的存放 </h2>
            <p>{{title}}</p>
        </div>
    </template>
    <script>
        Vue.component(‘cpn‘, {
            template: ‘#MyCpn‘,
            data() {
                return {
                    title: ‘我是组件中的专属数据‘
                }
            }
            // 组件是一个单独模块的封装:这个模块有自己的HTML模板,也有data数据。
        })
        let vm = new Vue({
            el: ‘#app‘,
            data: () => ({
                title: "我是顶层Vue实例中的数据,外部组件能访问我的数据吗?"
            })
        })
    </script>
</body>

</html>

解析:当你在调用title变量的时候,只能访问到组件内部定义的变量,因为组件是一个单独模块的封装。

2、为什么组件中的data必需是函数

因为组件是要重复使用的,当data是函数并且在多次调用的时候,所占的内存块不一样,所以data中的数据互不影响。

****完整代码****

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<div id="app">
    <cpn></cpn>
    <cpn></cpn>
    <cpn></cpn>
</div>

<body>
    <template id="MyCpn">
        <div>
            <h2>当前计数:{{content}}</h2>
            <button @click="res">-</button>
            <button @click="add">+</button>
        </div>
    </template>
    <script>
        Vue.component(‘cpn‘, {
            template: ‘#MyCpn‘,
            data() {
                return {
                    content: 0
                }
            },
            methods: {
                add() {
                    this.content++
                },
                res() {
                    this.content--
                }
            }
        })
        let vm = new Vue({
            el: ‘#app‘,
            data: () => ({
                title: "我是顶层Vue实例中的数据,外部组件能访问我的数据吗?"
            })
        })
    </script>
</body>

</html>

反过来,如果data不是用函数的话,在多次调用组件的时候,这里面的数据相互影响

***完整代码****

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<div id="app">
    <cpn></cpn>
    <cpn></cpn>
    <cpn></cpn>
</div>

<body>
    <template id="MyCpn">
        <div>
            <h2>当前计数:{{counter}}</h2>
            <button @click="res">-</button>
            <button @click="add">+</button>
        </div>
    </template>
    <script>
        const obj = {
            counter: 0
        }
        Vue.component(‘cpn‘, {
            template: ‘#MyCpn‘,
            data() {
                return obj
            },
            methods: {
                add() {
                    this.counter++
                },
                res() {
                    this.counter--
                }
            }
        })
        let vm = new Vue({
            el: ‘#app‘,
            data: () => ({
                title: "我是顶层Vue实例中的数据,外部组件能访问我的数据吗?"
            })
        })
    </script>
</body>

</html>

原文地址:https://www.cnblogs.com/DreamchaserHe/p/11765381.html

时间: 2024-10-16 08:57:06

深入理解--VUE组件中数据的存放以及为什么组件中的data必需是函数的相关文章

java中数据的存放位置

引用自java编程思想四----2.2.1 程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据:(1) 寄存器.这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配.我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹.(2) 堆栈.驻留于常规 RAM(随机访问存储器)区域,但可通过它的"堆栈指针"获得处理的直接支持.堆栈指针若向下移

js添加、修改、删除表格中数据、修改时在表格中直接修改

<html> <head> <script type="text/javascript"> function xianshi(){ //切换添加表单 var display=document.getElementById("add"); if(display.style.display=="block"){ display.style.display="none"; }else{ displ

12.父组件主动获取子组件的数据和方法

父组件主动获取子组件的数据和方法 1.父组件Home.vue <template> <div> <h2>{{msg}}</h2> <!-- 1.调用子组件的时候调用一个ref --> <!-- 2.在父组件中通过this.$refs.header.数据 this.$refs.header.方法 调用子组件的数据和方法 --> <!-- 注意,第一步是ref,第二步是refs --> <v-header ref=&qu

Hive数据导入——数据存储在Hadoop分布式文件系统中,往Hive表里面导入数据只是简单的将数据移动到表所在的目录中!

转自:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929 Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中.Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据.所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中! Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中

sqlite expert导入excel表格 (包括使用问题、以及把 一个表的数据插入到另一个表中)

一.sqlite导入excel 1.打开要导入的excel --- 另存为(2007版点击左上角OFFICE图标即可找到) --- 保存类型:CSV类型 (提示什么不兼容什么的,一律点确定.) 2.打开sqlite expert ,选择建好的数据库文件(或者是导入的已存在的db文件,或者是自己新建一个.db数据库文件). 右击文件名---选择最后一个import text file(CSV,TSV) 3.(如果没有建过和这个excel名相同的表)右边Destination选择第一项new tab

pl/sql中误删表中数据并提交恢复办法

最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_timestamp('20150401','yyyymmdd'); 此原理是利用Flashback Query这一特性,最常被应用的就是修复误操作的数据了.注意,这并不是说Flashback Query能够恢复数据.Flashback Query本身不会恢复任何操作或修改,也不能告诉你做过什么操作或修改,

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承.(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承. 分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量

vuex 实现vue中多个组件之间数据同步以及数据共享。

前言 在一些项目中有很多数据状态之间要实现数据共享状态共享,例如购物车的数据.用户的登录状态等等.vue父元素是可以通过props向子元素传递参数,子元素也可以通用smit向父元素传递参数.但是像购物车这种在项目中多个位置的引用时就会变得很麻烦.例如项目中使用了三个购物车的组件,那么当其中一个组件的值发生改变时,就要通过自身告诉父组件我的值发生改变了,然后父组件在通知其他两个购物车组件值发生改变了,需要进行同步,这样就会变得很麻烦.而vue-v就可以帮助我们解决这个繁琐的问题.

VUE中父组件向子组件传递数据 props使用

VUE中,子组件是不能直接访问父组件的数据(一般来说,当然如果你要破坏原则也是可以),如下< <body> <div id="fathercomponent"> <ul> <li v-for="item in fatherdatas">{{item}}</li> <!--父组件可以访问它自己的数据--> </ul> <child-component></chi