root容器里的代码被称为模板,有了模板会有特殊的模板语法。Vue模板中语法有两大类,一类是插值语法,另一类是指令语法。

插值语法

功能:用于解析标签体内容。写法:{{xxx}},xxx为js表达式,且可以直接读取到data中的所有属性。

由两个大括号引用Vue实例中定义的data数据,在Vue实例进行解析扫描时会检查到他的模板语法,从而根据模板语法继续宁解析,后形成正常的html片段执行。下面代码页面会显示                你好,jack。

    <!-- 准备一个容器 --><div id="root"><h1>插值语法</h1><h3>你好,{{name}}</h3></div><script type="text/javascript">new Vue({el: '#root',data: {name: 'jack'}})</script>

指令语法 v-bind

作用:用于解析标签(标签属性、标签体内容、标签体内容、绑定事件...)。

v-bind: 单向绑定,添加v-bind指令,后面的属性会被当做js表达式去执行。v-bind可以动态的给所有标签属性去绑定值。        简写形式:可以简写为冒号 “:”  。 插值语法往往指定标签体内容,

如果data中的key重复,可以在data中以层级关系定义。下面name重复,我们可以将其中一个name定义到下一个层级,避免重复引起冲突。如果重复,则会以最后定义的属性为准。

    <!-- 准备一个容器 --><div id="root"><h1>插值语法</h1><h3>你好,{{ name }}</h3><hr><h1>指令语法</h1><a :href='school.url'>点我去{{ school.name }}学习1</a></div><script type="text/javascript">new Vue({el: '#root',data: {name: 'jack',school: {name: 'biadu',url: 'http://www.baidu.com'}}})</script>

数据绑定

单向数据绑定:通过v-bind绑定的数据只会与data中定义的数据进行同步,如果修改页面中的数据则不会改变原本的数据。数据仅能从data流向页面。

双向数据绑定:通过v-model:value,可以双向修改。v-model只能应用在输入类元素中,因为需要用户输入数据进行交互。简写为v-mode。

    <!-- 创建一个容器 --><div id="root">单向数据绑定:<input type="text" :value="msg1"><br>双向数据绑定:<input type="text" v-model="msg2"></div><script type="text/javascript">new new Vue({el: '#root',data: {msg1: '单向数据绑定',msg2: '双向数据绑定'}})</script>

解析流程:容器中所写的模板交给vue实例,通过vue实例对语法的解析后,将其挂载(放到)到页面的指定位置。

el与data的两种写法

第一种方法,普通写法。

    <!-- 创建一个容器 --><div id="root"><h1>hello, {{ name }}</h1></div><!-- el两种写法 --><script type="text/javascript">new Vue({el: '#root', // el第一钟方法data: {  // data第一种写法 对象式name: '世界'}})</script>

第二种写法,函数式挂载,容器中所写的模板交给vue实例,通过vue实例对语法的解析后,将其挂载(放到)到页面的指定位置。

    <!-- 创建一个容器 --><div id="root"><h1>hello, {{ name }}</h1></div><!-- el两种写法 --><script type="text/javascript">const v = new Vue({data:function() {   // data第二种写法 函数式return {name: 'shijie'}}})console.log(v)v.$mount('#root')   // el第二种方法   mount - 挂载、镶嵌                   </script>

MVVM模型

    <!-- M:模型(Model) - 对应data中的数据V:视图(View) - 模板VM:视图模型(ViewModel) - Vue实例对象-->

VM负责V与M中数据传递与解析的工作,也就是前面说了很多次的流程。容器中所写的模板交给vue实例,通过vue实例对语法的解析后,将其挂载(放到)到页面的指定位置。

数据代理

Object.defineProperty方法回顾

该方法可以为一个对象添加属性,如果一个对象person中有两个属性分别为name与age,那么我们可以使用这个方法在对象中添加一个新的属性sex。

       let person = {name: '孙笑川',age: '38'}Object.defineProperty(person, 'sex', {value: '男', // sex属性不可被枚举 不能被添加遍历enumerable: true,    // 默认为false不可枚举 true表示可被枚举但不可以在网页控制台修改writable: true,      // 可被控制台修改数据,默认为falseconfigurable: true      // 控制属性是否可以被删除 默认为false}})

这样添加console.log(person)后,可以在网页中查找到崭新的属性sex,但是不能被修改。这个时候我们需要拿出get和set方法来完成对属性数据的查找和修改。

    <script type="text/javascript">let msg = '孙狗'let person = {name: '孙笑川',age: '38'}Object.defineProperty(person, 'sex', {// 当有人读取person的sex属性时,get函数(getter)就会被调用,且return就是sex的值。get:function() {return msg},// 当有人修改person的sex属性时,set函数(setter)就会被调用,且会受到修改的具体值。set(value) {msg = value}})console.log(person)     // {name: '孙笑川', age: '38', sex: '男'}console.log(Object.keys(person))    // 遍历  ['name', 'age']    无sex的key

这样的话我们就可以修改并得到数据的具体信息了。

数据代理

通过一个对象代理对另一个对象中的属性进行操作。(读/写)

    <script type="text/javascript">let obj1 = {x:100}let obj2 = {y:200}Object.defineProperty(obj2, 'x', {get() {return obj1.x},set(value) {obj1.x = value}})console.log(obj1)console.log(obj2)</script>

这样我们就可以通过obj2来操作obj1里的x属性了。

Vue中的数据代理

从零学习Vue - 02模板语法、el与data两种写法、mvvm模型、数据代理相关推荐

  1. java202302java学习笔记第十五天-罗马数字的两种写法2

  2. Vue2基础-el与data的两种写法(HTML版)

    目录 一.el的2种写法 二.data的2种写法 三. 一个重要的原则 Vue2基础全套教程合集:点击跳转        Vue2高级全套教程合集:点击跳转 一.el的2种写法 new Vue时候配置 ...

  3. Vue2(一):初识Vue、模板语法、数据绑定、el和data的两种写法、MVVM、数据代理、事件

    Vue2学习笔记:第一章 一.初识Vue 1. Vue的特点 2. Vue实例中的el和data 3.总结 二.模板语法 1.插值语法 2.指令语法 三.数据绑定 1.单向数据绑定(v-bind) 2 ...

  4. Vue的模板语法及案例

    文章目录 前言 一.双大括号表达式 二.插值 2.1文本 2.2 原始 HTML 2.3 特性 2.4 javascript 表达式 三.指令 3.1 参数 3.2 动态参数 3.3 修饰符 四.指令 ...

  5. [vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解

    [vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解 模板引擎: 负责组装数据,以另外一种形式或外观展现数据. 优点: 可维护性(后期改起来方便): 可扩展性(想要 ...

  6. 【Vue】—Vue的模板语法

    [Vue]-Vue的模板语法 在template中写HTML时,如果需要渲染变量或者表达式,可以使用{{ }}形式来渲染,这个{{ }}就是模板语法,可以把变量或者表达式的结果渲染出来. 模板语法渲染 ...

  7. C语言从零学习笔记02

    Day02 目录 C语言从零学习笔记02 一.初识C语言 二.第一个C语言程序 三.代码上传Gitee 四.数据类型 这只是一篇新手个人学习笔记,其中不可避免出现理解不深不透,仅以督促自身及记录,如有 ...

  8. (五)Vue之data与el的两种写法

    文章目录 el的两种写法 data的两种写法 Vue学习目录 上一篇:(四)Vue之数据绑定 下一篇:(六)Vue之MVVC 容器: <div id="root">&l ...

  9. Vue el和data的两种写法

    1.5 el 与 data的两种写法 el 有两种写法 1.创建Vue实例对象的时候配置el属性 2.先创建Vue实例,随后再通过vm.$mount('#root')指定 el 的值 data 有两种 ...

最新文章

  1. 2021年大数据Hadoop(三):Hadoop国内外应用
  2. “诺奖风向标”--2020年斯隆研究奖公布,其中有16位华人学者获奖!
  3. nsswitch.conf文件详解
  4. [原创] 浅谈ETL系统架构如何测试?
  5. 这才是智能手表该有的样子 HUAWEI WATCH 2评测
  6. micropython esp32手册_使用ESP32控制板(二):燒錄MicroPython韌體
  7. html原生上传,一个基于HTML5及原生JS的文件上传组件--JohnUploader
  8. python取数字第一位数_python基础:8.切片和缩进
  9. es6 Generator.prototype.throw()方法
  10. 「HAOI2018」染色 解题报告
  11. 第三:Pycharm中安装Python依赖包(非常详细)
  12. 不想“被out”?来看看现在的开发者都在做什么
  13. 使用docker安装easy-mock
  14. python+django天天生鲜超市购物系统
  15. 由浅入深玩转华为WLAN—12安全认证配置(5)Portal认证,外置Protal服务器TSM对接(网页认证)
  16. android 各国时区
  17. vue 添加滚动条 横向 竖向
  18. 学校的校园景点平面图(校园景点迷你地图C++数据结构)
  19. 华为鸿蒙系统p50,华为p50自带鸿蒙是什么意思_华为p50是鸿蒙系统吗
  20. 游戏百科选择题小测试,就算你是游戏大神也不一定全做对

热门文章

  1. 掌握电商后台设计,这一篇足矣
  2. 2018总结----对共享单车的思考
  3. QString::fromLocal8Bit()函数
  4. 第12周项目2—摩托车继承自行车和机动车
  5. 衢州学院计算机应用技术分数线,2021年衢州学院投档线及各省最低录取分数线统计表...
  6. 云服务器的快照功能是什么?
  7. MFC com控件类
  8. java 为新员工分配部门
  9. 技术管理进阶——你了解成长的全貌吗?
  10. 容量法和库仑法的异同点_库伦法水分仪和容量法的区别与差异