data为long 怎么设置vue_vue基础之data

使用

调用data

onLoad(option) {

_self = this;

_self.$data.xxxx = "te";

}

绑定节点

元素~~~~

方法

methods: {

tabSelect(e) {

this.TabCur = e.currentTarget.dataset.id;

},

}

双向绑定原理

https://www.cnblogs.com/wangjiachen666/p/9883916.html

原理

Vue内部通过Object.defineProperty方法属性拦截的方式,把data对象里每个数据的读写转化成getter/setter,当数据变化时通知视图更新。

也就是说:

输入框内容变化时,data 中的数据同步变化。即 view => model 的变化。

data 中的数据变化时,文本节点的内容同步变化。即 model => view 的变化。

使数据对象变得“可观测”

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

依赖收集

完成了数据的'可观测',即我们知道了数据在什么时候被读或写了,那么,我们就可以在数据被读或写的时候通知那些依赖该数据的视图更新了,为了方便,我们需要先将所有依赖收集起来,一旦数据发生变化,就统一通知更新。其实,这就是典型的“发布订阅者”模式,数据变化为“发布者”,依赖对象为“订阅者”。

订阅者Watcher

订阅者Watcher 是一个 类,在它的构造函数中,定义了一些属性:

vm:一个Vue的实例对象;

exp:是node节点的v-model或v-on:click等指令的属性值。如v-model="name",exp就是name;

cb:是Watcher绑定的更新函数;

总结

实现数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器Observer,用来监听所有属性。如果属性发上变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个,所以我们需要有一个消息订阅器Dep来专门收集这些订阅者,然后在监听器Observer和订阅者Watcher之间进行统一管理的。

代码

index.html

Document

function myVue (data, el, exp) {

this.data = data;

observable(data); //将数据变的可观测

el.innerHTML = this.data[exp]; // 初始化模板数据的值

new Watcher(this, exp, function (value) {

el.innerHTML = value;

});

return this;

}

var ele = document.querySelector('#name');

var input = document.querySelector('input');

var myVue = new myVue({

name: 'hello world'

}, ele, 'name');

//改变输入框内容

input.oninput = function (e) {

myVue.data.name = e.target.value

}

//改变data内容

function changeInput(){

myVue.data.name = "难凉热血"

}

observer.js

/**

* 把一个对象的每一项都转化成可观测对象

* @param { Object } obj 对象

*/

function observable (obj) {

if (!obj || typeof obj !== 'object') {

return;

}

let keys = Object.keys(obj);

keys.forEach((key) =>{

defineReactive(obj,key,obj[key])

})

return obj;

}

/**

* 使一个对象转化成可观测对象

* @param { Object } obj 对象

* @param { String } key 对象的key

* @param { Any } val 对象的某个key的值

*/

function defineReactive (obj,key,val) {

let dep = new Dep();

Object.defineProperty(obj, key, {

get(){

dep.depend();

console.log(`${key}属性被读取了`);

return val;

},

set(newVal){

val = newVal;

console.log(`${key}属性被修改了`);

dep.notify() //数据变化通知所有订阅者

}

})

}

class Dep {

constructor(){

this.subs = []

}

//增加订阅者

addSub(sub){

this.subs.push(sub);

}

//判断是否增加订阅者

depend () {

if (Dep.target) {

this.addSub(Dep.target)

}

}

//通知订阅者更新

notify(){

this.subs.forEach((sub) =>{

sub.update()

})

}

}

Dep.target = null;

watcher.js

class Watcher {

constructor(vm,exp,cb){

this.vm = vm;

this.exp = exp;

this.cb = cb;

this.value = this.get(); // 将自己添加到订阅器的操作

}

get(){

Dep.target = this; // 缓存自己

let value = this.vm.data[this.exp] // 强制执行监听器里的get函数

Dep.target = null; // 释放自己

return value;

}

update(){

let value = this.vm.data[this.exp];

let oldVal = this.value;

if (value !== oldVal) {

this.value = value;

this.cb.call(this.vm, value, oldVal);

}

}

}

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

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

相关文章

python return函数_Python函数(一)-return返回值

定义一个函数可以在最后加上return返回值,方便查看函数是否运行完成和返回函数的值 # -*- coding:utf-8 -*- __author__ "MuT6 Sch01aR" def test(): print(test) def test1(): print(test1) return 8 def test2(): print("test2") return 4,t…

吉林大学计算机英语成绩,吉林大学复试出结果,初试分差84分,复试成绩却相差无几!...

原标题:吉林大学复试出结果,初试分差84分,复试成绩却相差无几!2021届考研的同学有不少同学已经完成复试,但也有一部分同学还正在忙着准备复试科目,各大高校近期也纷纷发布出了2021年研究生复试的相关工作安…

势如破竹!169 篇论文带你看 BERT 在 NLP 中的 2019 年!

来源: AI科技评论 编译 | JocelynWang编辑 | 丛末2019 年,可谓是 NLP 发展历程中具有里程碑意义的一年,而其背后的最大功臣当属 BERT !2018 年底才发布,BERT 仅用 2019 年一年的时间,便以「势如破竹」的姿…

ic 卡获取帐号apdu指令_非接触IC卡片APDU指令系统介绍..docx

CPU卡APDU指令介绍APDU指令格式根据7816-4规范,从终端发出的命令和卡片响应的信息必须遵从以下4种格式。情形1:命令 :CLAINSP1P200响应 :SW1SW2情形2:命令:CLAINSP1P2Le响应:Le字节的DATASW1SW2情形3:命令:CLAINSP1P2LcDATA响应 :SW1SW2情形4…

linux运行nodejs一般路径_NodeJS和命令行程序

奇技指南本文来自奇舞周刊公众号,转载请注明出处。作者:刘观宇,360 奇舞团高级前端工程师、技术经理,W3C CSS 工作组成员。源 起植根于Unix系统环境下的程序,很多都把贯彻Unix系统设计的哲学作为一种追求。Unix系统管道…

计算机怎么允许用户安装文件,如何禁止安装某个软件?电脑不允许安装软件的方法...

如何禁止安装某个软件?想要禁止安装软件,可以在组策略中直接启用软件安装规则,但如果只是想要禁用某个软件的安装,则需要用户将该软件的证书进行一个限制,证书不通过,自然无法安装,下面是操作步…

Docker日志收集最佳实践

传统日志处理 说到日志,我们以前处理日志的方式如下: 日志写到本机磁盘上 通常仅用于排查线上问题,很少用于数据分析 需要时登录到机器上,用grep、awk等工具分析 那么,这种方式有什么缺点呢? 第一&#x…

2020年10个诱人的技术里程碑

来源:IEEE电气电子工程师心理控制仿生四肢将首次亮相波士顿马拉松麻省理工学院的研究人员已经开发出一种只用思想控制仿生肢体的方法。2016年首次在人类身上试验。2020年,当在阿富汗失去腿的老兵Brandon Korona用他的新仿生肢参加波士顿马拉松比赛时&…

goland 方法注释_goland 设置注释模板的过程图文详解

网上找了一些办法 都没有说到关键点:梳理一下设置步骤如下,以及避免的坑。新建文件自动加注释:Preferences | Editor | File and Code Templates 打开go File 在右侧输入模板,然后点击Apply;对已有的方法或者文件添加注…

python爬虫源码下载 视频_Python爬虫下载视频文件部分源码

importrequestsimporttime headers{User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36} movie_url 在这里输入视频地址,例如:http://www.***********.mp4movie_name 视…

耶鲁大学计算机科学录取,耶鲁大学计算机科学研究生Offer及录取要求

对于打算去耶鲁大学读研究生的学生来讲,耶鲁大学研究生申请要求及耶鲁大学研究生专业介绍是学生最关心的问题。本文香港介绍耶鲁大学研究生申请要求及耶鲁大学研究生的专业介绍,帮助更多的学生更好的了解耶鲁大学。耶鲁大学研究生申请要求及专业介绍耶鲁…

PHP的错误处理机制

php的错误处理是比较复杂的, 本文讲解php中所有错误相关的重要知识点做一次梳理, 便于理解php的错误机制. 基础知识 在此之前, 先熟悉一下php error的基础知识 预定义常量运行时配置异常错误处理函数预定义常量 定义了所有php的错误类型常量, 每一个常量都是一个整型数值, 它的…

什么是智能仓储?一文带你彻底搞懂!

来源:机器人网什么是智能仓储?智能仓储是仓库自动化的产物。与智能家居类似,智能仓储可通过多种自动化和互联技术实现。这些技术协同工作以提高仓库的生产率和效率,最大限度地减少人工数量,同时减少错误。在手动仓库中…

assign深拷贝_Object.assign 深拷贝?浅拷贝?

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。Object.assign(target, ...sources) 【target:目标对象】,【souce:源对象(可多个)】1.如果目标对象中的属性具有相同的键,…

python交互模式运行py文件_对Python的交互模式和直接运行.py文件的区别详解

很多初学的小伙伴总是搞不清交互模式和命令行模式,下面一起来了解一下。 看到类似C:\>是在Windows提供的命令行模式,看到>>>是在Python交互式环境下。 在命令行模式下,可以执行python进入Python交互式环境,也可以执行…

HTML文件属于void值吗,使用HTML :: TreeBuilder查找html文件中的值

找到与匹配内容,在这种情况下,“磁盘空间使用情况”,然后找到下一个。一旦你有一个元素树:my $usage $t->look_down(_tag > td,sub {$_[0]->as_trimmed_text() ~ /^Disk Space Usage$/})->right()->as_trimmed_te…

SQL Server-基础-经典SQL语句

1 经典SQL语句2 基础3 1、说明:创建数据库4 CREATE DATABASE database-name 5 2、说明:删除数据库6 drop database dbname7 3、说明:备份sql server8 --- 创建 备份数据的 device9 USE master10 EXEC sp_addumpdevice disk, testBack, c:\mss…

什么是具身认知?反身理论?

来源:人机与认知实验室 具身认知(Embodied cognition),也称“具体化”(embodiment),是心理学中一个新兴的研究领域。具身认知理论主要指生理体验与心理状态之间有着强烈的联系。生理体验“激活”…

spring字符串判空_字符串工具类StringUtils实现字符串是否中文、字符串分割/判空/替换/查找、是否包含乱码及字符串数组合并等常规操作...

一、前言关于字符串工具类StringUtils实现字符串是否包含isChinese中文、是否包含isMessyCode乱码、常规数据类型转换、替换/删除/判空、两字符串数组mergeStringArrays合并、删除trimArrayElements字符串数组指定数组元素、字符串去重removeDuplicateStrings处理、字符串集合转…

成人高考 计算机英语作文,2017年成人高考英语作文范文

本文“2017年成人高考英语作文范文”,跟着出国留学网成人高考频道来了解一下吧。希望能帮到您!假设你叫王红,于5月7日星期五在学校门口看到两则海报后,决定邀你的好友Harry一起参加其中的一项活动。你赶到Harry住处时,发现他不在。…