Vue学习笔记入门篇——数据及DOM

本文为转载,原文:Vue学习笔记入门篇——数据及DOM

数据

data

类型

Object | Function

详细

Vue 实例的数据对象。Vue 将会递归将 data 的属性转换为 getter/setter,从而让 data 的属性能够响应数据变化。对象必须是纯粹的对象(含有零个或多个的key/value对):浏览器 API 创建的原生对象,原型上的属性会被忽略。大概来说,data 应该只能是数据 - 不推荐观察拥有状态行为的对象。

一旦观察过,不需要再次在数据对象上添加响应式属性。因此推荐在创建实例之前,就声明所有的根级响应式属性。

实例创建之后,可以通过 vm.$data 访问原始数据对象。Vue 实例也代理了 data 对象上所有的属性,因此访问 vm.a 等价于访问 vm.$data.a。

以 _ 或 $ 开头的属性 不会 被 Vue 实例代理,因为它们可能和 Vue 内置的属性、 API 方法冲突。你可以使用例如 vm.$data._property 的方式访问这些属性。

当一个组件被定义, data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象。

如果需要,可以通过将 vm.$data 传入 JSON.parse(JSON.stringify(…)) 得到深拷贝的原始数据对象。
示例代码:

var data = { a: 1 }
// 直接创建一个实例
var vm = new Vue({data: data
})
vm.a // -> 1
vm.$data === data // -> true
// Vue.extend() 中 data 必须是函数
var Component = Vue.extend({data: function () {return { a: 1 }}
})

 

method

类型:

{ [key: string]: Function }

详细

methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例。
示例代码:

<div id="app-method"><button @click="click">click me</button>
</div>
var app_method = new Vue({el:'#app-method',methods:{click:function () {alert(this.getMessage())},getMessage:function () {return 'hello chain'}}
})

 

点击按钮后,结果如下:

watch

类型

{ [key: string]: string | Function | Object }

详细

一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。
示例代码:

<div id="app-watch"><p>First Name: <input type="text" v-model="firstname"></p><p>Last Name: <input type="text" v-model="lastname"></p><p>{{fullname}}</p>
</div>
var app_watch = new Vue({el:'#app-watch',data:{firstname:'',lastname:'',fullname:''},watch:{firstname:function (newVal, oldVal) {this.fullname = newVal + ' ' + this.lastname},lastname:function (newVal, oldVal) {this.fullname = this.firstname + ' ' + newVal}}
})

 

在输入框内输入内容,便可看到如下结果:

computed

类型

{ [key: string]: Function | { get: Function, set: Function } }

详细

计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。

计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。注意,如果实例范畴之外的依赖 (比如非响应式的 not reactive) 是不会触发计算属性更新的。
示例代码:

<div id="app-computed"><p>Original message: "{{ message }}"</p><p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
var app_computed = new Vue({el:'#app-computed',data:{message:'hello chain'},computed:{reversedMessage:function () {return this.message.split('').reverse().join('')}}
})

 

运行结果如下图:

computed与methods对比

我们可以将同一函数定义为一个 method 而不是一个计算属性。对于最终的结果,两种方式确实是相同的。然而,不同的是计算属性是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

computed与watch对比

Vue 确实提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:watch 属性。当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 AngularJS。然而,通常更好的想法是使用 computed 属性而不是命令式的 watch 回调。
例如之前讲到watch的时候的那个例子,如果换成computed的话,代码如下:

<div id="app-computed-watch"><p>First Name: <input type="text" v-model="firstname"></p><p>Last Name: <input type="text" v-model="lastname"></p><p>{{fullname}}</p>
</div>
var app_computed_watch = new Vue({el:'#app-computed-watch',data:{firstname:'',lastname:''},computed:{fullname:function () {return this.firstname + ' ' + this.lastname}}
})

 

运行结果如下:

在这种场合下,这种写法是不是更好呢?答案是肯定的。

DOM

el

类型

string | HTMLElement

限制

只在由 new 创建的实例中遵守。

详细

提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标。可以是 CSS 选择器,也可以是一个 HTMLElement 实例。

在实例挂载之后, 元素可以用 vm.$el 访问。

如果这个选项在实例化时有作用,实例将立即进入编译过程,否则,需要显式调用 vm.$mount() 手动开启编译。

template

类型

string

详细

一个字符串模板作为 Vue 实例的标识使用。模板将会 替换 挂载的元素。挂载元素的内容都将被忽略,除非模板的内容有分发 slot。

如果值以 # 开始,则它用作选项符,将使用匹配元素的 innerHTML 作为模板。
例如:

Vue.component('child-component', {template: '<div v-show="someChildProperty">Child</div>',data: function () {return {someChildProperty: true}}
})

 

转载请注明出处
上一节:Vue学习笔记入门篇——安装及常用指令介绍
返回目录

转载于:https://www.cnblogs.com/ChainZhang/p/7130479.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Thinkphp 3.2中控制页面不缓存

最近开发WAP网站时&#xff0c;最讨厌的就是back键&#xff0c;会造成些麻烦事。不过&#xff0c;问题总有办法解决。 有些页面&#xff0c;点击back键回退会加载缓存&#xff0c;这不是想要的&#xff0c;所以希望能够控制该页面不缓存&#xff0c;每次请求都需要从服务器获取…

能识别nvme的pe启动_PE系统纯净(可以识别nvme固态)

此前我一直用的微PE系统&#xff0c;纯净没有广告&#xff0c;但是我却发现不能识别nvme固态&#xff0c;于是就寻找可以识别nvme固态的PE&#xff0c;虽然知道老毛桃可以用&#xff0c;但是我并不想用。然后网上查到可以自动向PE系统中添加nvme的驱动&#xff0c;从而就可以识…

H3CNE认证

H3CNE&#xff08;H3C Certified Network Engineer&#xff0c;H3C认证网络工程师&#xff09;H3CNE认证主要定位于中小型网络的规划、设计、配置与维护。通过H3CNE认证&#xff0c;将证明您对数据通信网络有全面深入的了解&#xff0c;掌握面向中小型企业的网络通用技术&#…

BZOJ 3144 [Hnoi2013]切糕

3144: [Hnoi2013]切糕 Description Input 第一行是三个正整数P,Q,R&#xff0c;表示切糕的长P、 宽Q、高R。第二行有一个非负整数D&#xff0c;表示光滑性要求。接下来是R个P行Q列的矩阵&#xff0c;第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤P, 1≤y≤Q, 1≤z≤R)。 100%的数据…

java java 大端_Java 大小端转换

package nlp.nlp;/*** 小端数据&#xff0c;Byte转换**/public class ByteConvert {public static void main(String[] args) {ByteConvert c new ByteConvert();c.Int2Bytes_LE(126);}public static final int UNICODE_LEN 2;/*** int转换为小端byte[](高位放在高地址中)* p…

《ASP.NET Core 6框架揭秘》实例演示[18]:HttpClient处理管道

在《《ASP.NET Core 6框架揭秘》实例演示[17]&#xff1a;利用IHttpClientFactory工厂来创建HttpClient》之后&#xff0c;我们将关注点放到HttpClient对象上。我们知道ASP.NET的核心就是由中间件组成的请求处理管道&#xff0c;HttpClient也采用了类似的设计。HttpClient管道由…

腾讯云副总裁答治茜:移动互联网破局要借助“三张网”

5月24日&#xff0c;2018腾讯云未来峰会在广州召开。在互联网专场上&#xff0c;腾讯云副总裁答治茜就泛互联网行业云化的主题发表演讲。在演讲中答治茜表示&#xff0c;过去移动互联网的高速增长到现在已经遇到了一个天花板&#xff0c;需要借助马化腾提到的“人联网、物联网、…

雅诗兰黛天猫超级品牌日:未央唇膏、红装小棕瓶“当红不让”

随着年末圣诞季的临近&#xff0c;各大美妆品牌陆续推出了圣诞套装&#xff0c;红红火火的超豪华套装&#xff0c;算是对用户最实在的回馈。高端美妆品牌的“领头羊”雅诗兰黛&#xff0c;当然也“当红不让”&#xff0c;趁着圣诞季&#xff0c;与天猫超级品牌日联手打造了一场…

JAVA常见算法题(三十一)---冒泡排序

package com.jege.spring.boot.hello.world;/*** java算法之冒泡排序<br>* 将数组按照从大到小的顺序排列<br>* * * author Administrator**/ public class BubbleSort{public static void main(String[] args){int score[] {67, 69, 75, 87, 89, 90, 99, 100};fo…

java 1.7的新特性_[Java]  JDK 1.7版本的 新特性

在网上看到一些jdk1.7的新特性&#xff0c;现将我觉得比较实用的记录于下&#xff1a;(1)switch中可以使用字串了String s "test";switch (s) {case "test" :System.out.println("test");case "test1" :System.out.println("tes…

WPF实现物理效果 拉一个小球

原文:WPF实现物理效果 拉一个小球一直以来都对物理效果有神秘感,完全不知道怎么实现的.直到看到了周银辉在老早前写的一篇博客:http://www.cnblogs.com/zhouyinhui/archive/2007/06/23/793724.html 终于知道是怎么实现的了. CompositionTarget类的Rendering事件.在每一帧成功渲…

C# CM框架下一行代码实现多页面管理

概述之前我分享过一个wpf的项目实践&#xff0c;主页面左侧是个listbox&#xff0c;每次选择改变后呈现对应的页面&#xff0c;界面图如下&#xff1a;要实现这样一个功能&#xff0c;我之前是采用传统方式实现的&#xff0c;本节我采用CM框架下的Conductor<T>去实现&…

如何用DW设计界面 结合 VS设计后台代码

原文发布时间为&#xff1a;2008-11-02 —— 来源于本人的百度文章 [由搬家工具导入]问&#xff1a;在vs.net里有form标记&#xff0c;而dw里却没有&#xff0c;两个里面的标记代码都不一样&#xff0c;怎么能通用&#xff1f; 在.net里修改dw的文件&#xff0c;或在dw里修改a…

java中instanceof 详解_java中的instanceof用法详解

instanceof是Java的一个二元操作符(运算符),也是Java的保留关键字。它的作用是判断其左边对象是否为其右边类的实例&#xff0c;返回的是boolean类型的数据。用它来判断某个对象是否是某个Class类的实例。用法&#xff1a;boolean result object instanceof class参数&#xf…

关于JAVA异常处理的20个最佳实践

关于JAVA异常处理的20个最佳实践 在我们深入了解异常处理最佳实践的深层概念之前&#xff0c;让我们从一个最重要的概念开始&#xff0c;那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions)、非检查性异常(unchecked Exceptions) 和 错误(errors)。 异…

Atitit Data Matrix dm码的原理与特点

Atitit Data Matrix dm码的原理与特点 Datamatrix原名Datacode&#xff0c;由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明。 Datamatrix是一种矩阵式二维条码&#xff0c;其发展的构想是希望在较小的条码标签上存入更多的资料量。Datamatrix的最小…

SSM框架搭建(四) springmvc和mybatis的配置

SSM框架搭建&#xff08;一&#xff09; JDK和MAVEN环境搭建 SSM框架搭建&#xff08;二&#xff09; 创建MAVEN项目 SSM框架搭建&#xff08;三&#xff09; 数据库创建和MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件 SSM框架搭建&#xff08;四&#xff09; sprin…

10 个有关 String 的面试问题

2019独角兽企业重金招聘Python工程师标准>>> 下面是面试中最容易问到的有关String的问题。 1. 如何比较两个字符串&#xff1f;使用“”还是equals()方法&#xff1f; 简单来讲&#xff0c;“”测试的是两个对象的引用是否相同&#xff0c;而equals()比较的是两个字…

基于ASP.NET Core 6.0的整洁架构

背景最近尝试录制了一个系列视频&#xff1a;《ASP.NET Core 6.0Vue.js 3 实战开发》&#xff0c;本节是视频内部整洁架构的理论和实战的文字稿。因为在录制之前&#xff0c;我通常会编写完整的文字内容作为视频文案&#xff0c;这里分享给大家&#xff0c;希望对你有所帮助。如…

大并发数据队列

图解#include<stdio.h>#include<stdlib.h>#include<memory.h>#define N 100#define mytype intstruct MyQueue{mytype data[N];//数组存储队列int front;//拉屎int rear;//吃东西};typedef struct MyQueue myQ;//初始化void init(myQ *p){p->front p->…