1.响应式

  vue修改了每个添加到data上的对象,当该对象发生变化时vue会收到通知,从而实现响应式。对象的每个属性都会被替换为getter,setter方法。

  有两种方式实现data对象的监听

    (1)脏检查:通过存储这个对象副本,然后比较两者,但这种方法并不高效。

    (2)使用Objectf.defineProperty(),以下是vue的基本思路

const storedData = {};
storedData.useId = data.useId
Object.defineProperty(data,'userId',{
get(){
return storedData.useId;
},
set(value){
console.log('user ID changed!');
storedData.useId = value;
},
configurable:true,
enumerable:true
})

   深入了解可查阅vue官方文档。

  如何动态添加响应式属性:

    getter/setter方法实在初始化时添加的,只有已经存在的属性是响应式的,为对象直接添加新属性,不会使这个属性成为响应式的;

    因为es5的限制,vue不能检测到对象的属性添加或删除,只有在data对象上的属性才能使他为响应式的。

    (1)最简单的办法是在初始化时定义这个属性

    (2)使用object.assign()来创建一个新的对象然后覆盖原有的对象,当需要一次性更新多个属性时,这是最有效的方法

const vm = new Vue({
data: {
formData: {
username: "四海潮生"
}
}
})
vm.formData = Object.assign({},vm.formData,{
name:'some user'
})

    (3)vue官方提供的Vue.set(),组件内部this.$set;

      两者区别:1.在vue的源码中两者都使用了set函数。区别在于vue.set()是将set函数绑定在vue的构造函数上,this.$set()是将set函数绑定在vue的原型上。

           2.vue.set可是设置示例创建后添加的属性,this.$set只能设置实例创建后存在的属性。

  设置数组的元素:

    不能直接使用索引来设置数组的元素。

     可以使用arr.splice()方法来移除旧元素,添加新元素。也可以使用vue.set(arr,2,'bob')

      .splice()方法还可以设置数组的长度,但是只能缩短,不能增加。在原生JS中,可以设置长短,自动让空元素填充数组,这种方式不适用于data对象中的数组,因为vue不能检测到该操作对数组的任何更改。

2.双向数据绑定v-model

  主要用于表单元素,如input,在input中输入值,绑定在data上的属性值也会随之更新,input也会接收data内的初始值

3.动态设置HTML v-html

  v-html的值不管是什么内容都会被直接输出到页面上,不会转义。

  慎用此指令,不要将用户输入或用户修改的内容置于v-html中,因为可能将自己暴露在xss的风险中,可能一不小心就允许用户在网站上执行恶意脚本

VUE基础回顾2的更多相关文章

  1. 自定义指令 VUE基础回顾7

    vue除了有v-if等内置指令,我们也可以创建自定义指令. 例:我们可以实现一个可以每隔一秒闪烁的节点,类似于<blink>标签的行为.添加一个指令类似于添加一个过滤器,可以将他传入vue ...

  2. 一、VUE基础回顾1

    1.v-if和v-show v-if 和v-show都可以显示和隐藏元素: 区别:(1)v-if初始值为false那么这个元素不会被渲染 ,v-show不管初始值为何值都会被渲染 (2)v-if是控制 ...

  3. VUE基础回顾6

    1.ref ref可以直接访问元素,而不需要使用querySelector或者其他dom节点的原生方法. <div ref = "box"></div> 在 ...

  4. 动画 VUE基础回顾8

    过渡和动画 使用<transition> 组件包裹 例: <transition name="fade"> <div v-if="true& ...

  5. vue基础回顾 router

    vue-router 1. 底层原理 hash 或者h5 histroy(有兼容性) 2. 使用的时候Vue需要引入VueRouter Vue.use(VueRouter) //VueRouter 底 ...

  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch

    回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...

  7. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十九║Vue基础: 样式动态绑定+生命周期

    回顾 哈喽大家好,前后端分离系列文章又开始了,今天周一,还是感谢大家花时间来观看我写的博客,周末呢,没有写文章,但是也没有闲着,主要是研究了下遗留问题,看过之前文章的应该知道,之前的在AOP使用Red ...

  8. Vue基础之插值表达式的另一种用法!附加变量的监听!

    Vue基础之插值表达式的另一种用法!附加变量的监听! 讲这个之前我们先回顾一下原来的用法! <body> <!-- Vue.js的应用可以分为两个重要的组成部分 一个是视图! 另一个 ...

  9. Vue基础之Vue的模板语法

    Vue基础之Vue的模板语法 数据绑定 01 数据绑定最常见的形式就是使用插值表达式(两个大括号!)[也就是小胡子语法!mustache] <body> <!-- Vue.js的应用 ...

随机推荐

  1. Tensorflows安装(cpu版安装方法)

    一.说明 首先声明,本人系统是Windows10 64位,Win7未试. 本文旨在帮助园友以更简单的方式安装Tensorflow,下面介绍的是如何安装Python的Tensorflow cpu版本. ...

  2. sql为什么要用where 1=1?

    这个1=1常用于应用程序根据用户选择项的不同拼凑where条件时用的.例如:查询用户的信息,where默认为1=1,这样用户即使不选择任何条件,sql查询也不会出错.如果用户选择了姓名,那么where ...

  3. Roberts算子

    https://blog.csdn.net/likezhaobin/article/details/6892176 https://zhuanlan.zhihu.com/p/35032299 Robe ...

  4. 为什么JDK代码这样写?final ReentrantLock takeLock = this.takeLock

    在CopyOnWriteArrayList的源码中有一个细节值得学习,就是在addIfAbsent方法中ReentrantLock的用法,先是将一个这个成员变量this.lock重新赋值给一个局部变量 ...

  5. row_number() over()分组排序功能 partition by 用于给结果集分组

    select * from ( select row_number() over(partition by Gid order by Gid ASC) as RowN, * from( select ...

  6. (转)How To Create a Sudo User on Ubuntu

    转自:https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/ The sudo command is designed to al ...

  7. SVM – 核函数

    核函数的起源是对于线性不可分的分类情况,其实可以通过p次方多项式,及非线性模型进行分类:然后对于这类非线性多次方的,其实可以按照广义线性模型来进行升维变形,使之成为线性模型,这样就可以放到SVM中来进 ...

  8. Pi1-lite

    第一次加电无显示器怎么办?无解. 网上说在tf卡的根下建立ssh空文件来启动ssh服务,建立wpa_supplicant.conf文件来连接wifi. 我怎么都试不出来,只能老老实实接显示器.键盘.网 ...

  9. IDEA中Lombok插件的安装及使用

    这个插件的好处在于可以让我们的代码更简洁,减少一些重复的工作,最常用的就是@Data注解,比如在实体类上使用@Data注解,实体类的各个属性就不需要书写get和set方法. 安装方法: 1.File→ ...

  10. Promise.resolve解析

    总结自:https://blog.csdn.net/lq15310444798/article/details/81275278 Promise.resolve返回一个Promise实例 参数分4种情 ...