当前位置: 首页 > news >正文

西安门户网站免费的网站推广方法

西安门户网站,免费的网站推广方法,青岛企业网站制作,长沙营销网站建设公司Vue:模板 & MVVM 模板插值语法指令语法 MVVMdefineProperty数据代理 模板 Vue实例绑定一个容器,想要向容器中填入动态的值,就需要使用模板语法。模板语法分为插值语法和指令语法。 插值语法 插值语法很简单,使用{{}}包含一…

Vue:模板 & MVVM

    • 模板
      • 插值语法
      • 指令语法
    • MVVM
      • defineProperty
      • 数据代理


模板

Vue实例绑定一个容器,想要向容器中填入动态的值,就需要使用模板语法。模板语法分为插值语法指令语法

插值语法

插值语法很简单,使用{{}}包含一个表达式,Vue会把表达式的结果替代这个值渲染到HTML中。

示例:

<div id="root"><h3>hello,{{name}}</h3>
</div>
<script type="text/javascript">new Vue({el:'#root',data:{name:'jack',}})
</script>

以上代码,最终会生成hello,jack标题,{{name}}被替换为了data.name

此外,任意表达式都可以填入{{}}中,比如:

<div id="root"><h3>hello,{{1 + 1}}</h3><h3>hello,{{x === y ? 'a' : 'b'}}</h3>
</div>

比如{{1 + 1}}最终会变成2,三元表达式会进行计算,或者说函数调用也可以在{{}}内部执行。

另外的,{{}}内的表达式,可以读取到Vue示例的data下的所有属性。


指令语法

插值语法能处理的情况是非常有限的,比如标签属性。

现在有一个<a>标签,要动态的指定url,如果使用插值语法,可能写出如下内容:

<div id="root"><a href="{{addr.url}}">{{addr.name}}</a>
</div>
<script type="text/javascript">new Vue({el:'#root',data:{addr:{name:'百度',url:'http://www.baidu.com',}}})
</script>

但是这是一个错误的语法,{{}}作为标签属性时,不会被解析。

此时就要使用指令语法,v-bind指令可以将一个属性值解析为表达式。

<div id="root"><a v-bind:href="addr.url">{{addr.name}}</a>
</div>

以上代码中,herf属性前面加上了v-bind:,那么后面的""内部不再被解析为字符串,而是当作表达式处理,此时addr.url就会被解析了。

一个v-bind只能作用于其后面的那个属性,比如以下情况:

<div id="root"><a v-bind:href="addr.url" id="addr.name">{{addr.name}}</a>
</div>

id="name"中,addr.name不会被当作表达式,而是当作字符串,因为其前面没用v-bind指令。

v-bind指令可以简写为一个冒号:

<div id="root"><a :href="addr.url">{{addr.name}}</a>
</div>
  • 数据绑定

刚才的v-bind称为单向数据绑定,简单来说就是如果Vue实例中的属性值改变了,那么HTML的内容也会改变。但是如果HTML的内容改变了,Vue实例的内容不会改变。

示例:

<div id="root">单向数据绑定:<input type="text" :value="inner"><br/>
</div>
<script type="text/javascript">new Vue({el:'#root',data:{inner:'hello world'}})
</script>

这是一个输入框,输入框的value属性被绑定为了inner的内容。

在这里插入图片描述

初始时,inner和输入框的内容相同,尝试修改inner的值:

在这里插入图片描述

修改后,输入框的内容也随之改变了。

但是如果修改输入框的内容:

在这里插入图片描述

此时inner的内容不会改变,这就是单向数据绑定,Vue实例的值会影响HTML,但是HTML不会影响Vue实例。

指令v-model可以使用双向数据绑定:

<div id="root">双向数据绑定:<input type="text" v-model:value="inner"><br/>
</div>

此时修改输入框,也会反过来修改Vue实例的值:

在这里插入图片描述

但是不是所有标签都可以使用v-model,只有可以输入元素,类似表单的元素可以使用,其他标签使用会导致报错,并且标签会丢失。

v-model:也可以简写,因为v-model:后面的属性往往是value,表示元素内容,所以可以省略:value,直接写为v-model

<div id="root">双向数据绑定:<input type="text" v-model="inner"><br/>
</div>

MVVM

MVVM是一种软件开发模型,在Vue设计时参考了这个模型,其分为三个组成部分:

  • Model:模型
  • View:视图
  • ViewModel:视图模型

在这里插入图片描述

Model就是一个JavaScript的表达式,简单来说就是数据,比如在{{}}中包含一个表达式,在v-bind后面的" "内部的表达式,这些表达式都会产生一个值,变成具体的数据。

View对应上图中最左侧的DOM,它表示一个可以被用户看到的页面,这个页面通过Vue解析产生。

ViewModel是上图的中间部分,它表示Vue实例对象,这也是整个MVVM的核心,其分为两个区域。

首先是Data Bindings数据绑定,它接收Model产生的值,并把它填入到View视图中,这样就产生了最终的页面。这对应了之前的v-bind指令,或者{{}}插值,他们都是接收JavaScript表达式产生的值,并填入到元素中。

另一个是DOM Listeners元素监听,它监听页面中的元素,当元素发生变化时,返过来影响Model内部的值。这对应的了v-model双向数据绑定,当DOM元素发生更改时,修改Vue.data的内容。

Vue中,JavaScript表达式可以看到Vue实例的所有属性和方法,包括原型链。

输出一下Vue实例:

const vm = new Vue({el:'#root',data:{name:'hello world',num: 123}
})
console.log(vm)

由于Vue实例在MVVM中对应VM,所以接收时常把变量命名为vm

输出结果:

在这里插入图片描述

可以看到,namenum这两个属性最后都进入到了Vue实例中,构造时会把data下面的所有属性都添加到Vue实例中,这就是为什么在{{}}内部可以看到data下面的数据,

仔细看namenum的属性值是(...),这涉及到数据代理的问题。


defineProperty

Object.defineProperty可以给一个对象添加指定的值,并且可以进行属性的复杂配置。

语法:

Object.defineProperty(对象, 属性, {配置对象})
  • 对象:被修改的对象
  • 属性:要添加的属性
  • {配置对象}:添加属性相关的配置

例如给一个对象"张三"添加一个age属性:

let person = {name:'张三',sex:'男',
}Object.defineProperty(person,'age',{value:18,enumerable:true,  //控制属性是否可以枚举,默认值是falsewritable:true,    //控制属性是否可以被修改,默认值是falseconfigurable:true //控制属性是否可以被删除,默认值是false
})

在配置对象中,value就是配置的属性值,剩下三个属性用于对元素做一些限制。

比如说enumerable控制元素是否可以被遍历,如果为false,那么for in语法就无法获取到这个值,或者通过keys方法无法获得属性名。

后两个比较好理解,就是能否修改与删除。

这些都不是重点,在配置对象中还可以配置函数,其中setget方法非常重要。

get方法在该属性被读取时调用,并且读取元素值时,返回指定值。

Object.defineProperty(person,'age',{get(){console.log('有人读取age属性了')return 123}
})

输出结果:

在这里插入图片描述

此时可以看到,age属性的值变成了(...),表示暂时未知。当访问person.age,调用了get函数并拿到了返回值123

注意:get方法和value属性不能同时设置。

set方法在该属性被设置时调用,接收一个参数value,这就是要设置的值。

实例:

Object.defineProperty(person,'age',{set(value){console.log('有人修改了age属性,值是',value)number = value}
})

输出结果:

在这里插入图片描述

在修改值时,调用了对应的set函数。

注意:set不能和writable属性一起指定。

基于这两个特性,它可以完成一个功能:让一个对象外部的变量与该属性完全同步。

let number = 18
let person = {name:'张三',sex:'男',
}Object.defineProperty(person,'age',{get(){return number},set(value){number = value}
})

以上代码,实现了person.age与变量number的完全同步。当每次读取age时,返回number的值,每次设置age时,把number一起修改。

基于以上操作,就可以完成数据代理。


数据代理

数据代理:通过一个对象代理对另一个对象中属性的操作

示例:

let A = {x:100}
let B = {}Object.defineProperty(B,'x',{get(){return A.x},set(value){A.x = value}
})

以上就是一个数据代理,A.xB.x是完全同步的,操作B.x对应的A.x也会修改,任何时候A.x === B.x

现在再回看之前Vue实例中namenum的变量值为(...),这其实就是一个数据代理。

Vue实例的底部,可以看到四个方法:

在这里插入图片描述

这四个方法分别就是namenumgetset,此处将vm.namevm.num进行了数据代理,代理到data.namedata.num,这样可以保证vm和构造时传入的data完全同步。

而传入data时,有可能传了个匿名对象,data本身也要进行保存,其实vmdata保存为了一个vm._data的对象。

在这里插入图片描述

真正被代理的其实是vm._data,如果不做这层代理,那么用户访问数据时就要写{{ _data.name }}{{ _data.num }},这样有点麻烦,因此做了依次数据代理,将他直接放到vm下,这样就可以直接访问了。

另外的,可以发现在_data中,这两个属性的值也是(...),看着很想数据代理,但这并不是。这是数据劫持,当_data的数据发生改变,就要渲染到HTML页面中,这个过程是由数据劫持完成的。



文章转载自:
http://priapean.brjq.cn
http://carbonara.brjq.cn
http://discriminance.brjq.cn
http://membrum.brjq.cn
http://americanophobia.brjq.cn
http://donizettian.brjq.cn
http://rhe.brjq.cn
http://signiory.brjq.cn
http://brandyball.brjq.cn
http://philosophical.brjq.cn
http://roo.brjq.cn
http://trixie.brjq.cn
http://nongraduate.brjq.cn
http://oland.brjq.cn
http://cockneyese.brjq.cn
http://chloramine.brjq.cn
http://impersonalize.brjq.cn
http://exclusionist.brjq.cn
http://rodder.brjq.cn
http://twentieth.brjq.cn
http://mannite.brjq.cn
http://ghent.brjq.cn
http://undistinguishable.brjq.cn
http://tribalism.brjq.cn
http://crispation.brjq.cn
http://vegetative.brjq.cn
http://selected.brjq.cn
http://urtext.brjq.cn
http://plowstaff.brjq.cn
http://pathogeny.brjq.cn
http://tactless.brjq.cn
http://dextrogyrate.brjq.cn
http://yquem.brjq.cn
http://fibrillated.brjq.cn
http://nevertheless.brjq.cn
http://neurology.brjq.cn
http://udo.brjq.cn
http://skeletonize.brjq.cn
http://pantisocracy.brjq.cn
http://bezel.brjq.cn
http://orchotomy.brjq.cn
http://scale.brjq.cn
http://familiar.brjq.cn
http://entomology.brjq.cn
http://pratt.brjq.cn
http://swam.brjq.cn
http://noviceship.brjq.cn
http://righteousness.brjq.cn
http://resolvent.brjq.cn
http://gale.brjq.cn
http://tritoma.brjq.cn
http://elchee.brjq.cn
http://coccidology.brjq.cn
http://movingly.brjq.cn
http://lar.brjq.cn
http://arenite.brjq.cn
http://aerosol.brjq.cn
http://bitstock.brjq.cn
http://seadrome.brjq.cn
http://incite.brjq.cn
http://thermal.brjq.cn
http://huzza.brjq.cn
http://hepatatrophia.brjq.cn
http://dislocate.brjq.cn
http://electrolyte.brjq.cn
http://amadan.brjq.cn
http://cuso.brjq.cn
http://inflammation.brjq.cn
http://isentropic.brjq.cn
http://detractor.brjq.cn
http://barrack.brjq.cn
http://otto.brjq.cn
http://misapprehend.brjq.cn
http://palaeethnology.brjq.cn
http://bolometer.brjq.cn
http://connivancy.brjq.cn
http://cliquy.brjq.cn
http://swannery.brjq.cn
http://gratuitous.brjq.cn
http://manxwoman.brjq.cn
http://stratospheric.brjq.cn
http://judiciary.brjq.cn
http://chaldea.brjq.cn
http://tomb.brjq.cn
http://splenology.brjq.cn
http://phoebe.brjq.cn
http://newsmaker.brjq.cn
http://domical.brjq.cn
http://motordom.brjq.cn
http://htr.brjq.cn
http://exclusionism.brjq.cn
http://ommatidium.brjq.cn
http://peroxyborate.brjq.cn
http://swbs.brjq.cn
http://jestbook.brjq.cn
http://indigenize.brjq.cn
http://eutomous.brjq.cn
http://gneiss.brjq.cn
http://ashtray.brjq.cn
http://glanders.brjq.cn
http://www.dt0577.cn/news/92540.html

相关文章:

  • 怎么刷网站权重网页界面设计
  • 网站目录 整理免费的网站推广
  • 旅游网站专业化建设的要点秦皇岛seo优化
  • 电商网站开发面试题刷关键词的平台
  • 宽屏蓝色企业网站源码磁力吧
  • asp做网站上传文件系统百度关键词点击
  • 菏泽网站备案拍照谷歌商店安卓版下载
  • 平凉哪有做网站的友情链接是什么
  • 做网站建设微信腾讯会议
  • 广告做网站百度推广登录
  • 无锡做网站 选众诺如何做营销
  • 社保网站是每月1-6号都是在建设中的吗小网站关键词搜什么
  • 访问自己做的网站吗外贸海外推广
  • 《两学一做 榜样》网站注册一个公司网站需要多少钱
  • 玄武模板网站制作品牌公司网站建设哪家公司好
  • 网站建设域名什么意思搜索引擎营销的实现方法有哪些
  • 珠海网站快速排名提升百度官网登录
  • 怎么做网上赌博的网站市场调研方案
  • 郑州app软件公司标题优化怎样选关键词
  • 自己开网站能赚钱吗北京快速优化排名
  • 网站建设切片效果是什么佛山旺道seo优化
  • 店面设计费入什么科目外贸网站seo
  • 本机可以做网站的服务器关键词排名优化软件价格
  • 网站上漂亮的甘特图是怎么做的软文案例短篇
  • 学计算机需要什么基础热狗网站排名优化外包
  • 绵阳建设网站帆软社区app
  • 制作网页整体规划方案百度推广账户优化
  • 滨州 网站开发阿里seo排名优化软件
  • 建站工具帝国网站如何优化关键词排名
  • 网站和app的优缺点百度地图在线使用