Vue学习日记(二)——Vue核心思想

前言

Vue.js是一个提供MVVM数据双向绑定的库,其核心思想无非就是:

  • 数据驱动
  • 组件系统

数据驱动

Vue.js 的核心是一个响应的数据绑定系统,它让数据与DOM保持同步非常简单。在使用 jQuery 手工操作 DOM时,我们的代码常常是命令式的、重复的与易错的。Vue.js 拥抱数据驱动的视图概念。通俗地讲,它意味着我们在普通HTML模板中使用特殊的语法将 DOM “绑定”到底层数据。一旦创建了绑定,DOM将与数据保持同步。每当修改了数据,DOM 便相应地更新。这样我们应用中的逻辑就几乎都是直接修改数据了,不必与 DOM 更新搅在一起。这让我们的代码更容易撰写、理解与维护。

本人在阅读vue.js源码的时候,也发现了vue的数据驱动无非就是利用的是ES5Object.defineProperty和存储器属性,个人觉得也是vue比较轻便和灵活的原因之一。

getter和setter(所以只兼容IE9及以上版本),可称为基于依赖收集的观测机制。核心是VM,即ViewModel,保证数据和视图的一致性。

附:vue.js源码图在github上vue打包好的dist文件下面的vue.js可以找到(该图与核心技术无关,只是说明vue使用这个属性)

这个存储器属性也就是vue的核心,也是比jq好的地方之一,jq是通过绑定事件来进行操作dom,而vue和react是通过操作obj的属性来重新渲染dom

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <!--
        对入输入框input输入的内容都在output里面输出
     -->
    <input type="text" id="input">
    <br>
    <span id="output"></span>
</body>
<script>
    // 绑定事件的做法
    // 但是没有办法从控制台控制信息修改value
    document.getElementById("input").addEventListener("keyup", function(e) {
        document.getElementById("output").innerHTML = e.target.value
    })

    // 绑定虚拟dom的做法,就是通过改变一个obj的属性值
    // 进而改变dom的值
    var obj = {}
    // @obj 可以是任何一个对象
    // @"string" 动态绑定的属性值
    // @{} 构造getter和setter
    Object.defineProperty(obj, "string", {
        get: function() {
            console.log("getter")
        },
        set: function(val) {
            document.getElementById("output").innerHTML = val
            document.getElementById("input").value = val
        }
    })
</script>
</html>

组件系统

组件系统,就是由于vue有比较优秀的组件系统,所以,现在很多项目也都采用了vue框架,如果你想要深入的了解组件系统,建议可以看看vue的官方文档

用官方一点的话来形容,组件化就是:实现了扩展HTML元素,封装可用的代码。页面上每个独立的可视/可交互区域视为一个组件;每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护;页面不过是组件的容器,组件可以嵌套自由组合形成完整的页面。

简单的说,其实就是把页面进行分块处理,分成多个小块,每个小块就是一个组件,这样可以形成组件的复用,而且提高开发效率。

原文地址:https://www.cnblogs.com/homehtml/p/12038867.html

时间: 2024-10-16 10:55:06

Vue学习日记(二)——Vue核心思想的相关文章

Ext学习-基础概念,核心思想介绍

1.目标   本阶段的目标是通过学习一些基础知识来对EXTJS有个整体的了解,知道EXTJS的基础语法,核心设计思想等等 2.内容   1.基础部分学习   2.EXTJS类系统介绍   3.EXTJSMVC结构介绍   4.EXTJS数据模型介绍 3.学习流程           1.在学习之前,首先要对javaScript的基础要有个基础了解,如果不熟悉,请参考:javaScript基础之闭包   2[可选]学习了解一下EXTJS的一些常用功能:http://ziren.org/extjs/

vue学习笔记初识vue——使用HTML模板

在创建Vue实例时,如果声明了el配置项,那么你也可以省略template 选项.这时候,Vue.js将提取锚点元素的HTML内容,做为模板. 我们可以使用单一的el配置项来创建Vue实例: var vm = new Vue({el:'#app'}); 在Vue.js中,这种模板被称为HTML模板,而使用template配置项 书写的模板,被称为字符串模板. 工作原理 当Vue.js发现你提供的选项中没有template属性时,将提取el属性所 指定的DOM节点的outerHTML内容作为模板内

Vue学习~2:Vue实例

Vue 实例的创建 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的 当创建一个 Vue 实例时,你可以传入一个选项对象,指定这个 Vue 实例所管理的元素. 一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的.可复用的组件树组成 数据与方法 当一个 Vue 实例被创建时,它将 data 对象中的所有的属性加入到 Vue 的响应式系统中. 当这些属性的值发生改变时,视图将会产生"响应",即匹配更新为新的值. // 我们的数据

Vue学习系列(二)——组件详解

前言 在上一篇初识Vue核心中,我们已经熟悉了vue的两大核心,理解了Vue的构建方式,通过基本的指令控制DOM,实现提高应用开发效率和可维护性.而这一篇呢,将对Vue视图组件的核心概念进行详细说明. 什么是组件呢? 组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素. 为什么要用到组件呢? 为了可重用性高,减少重复性开发,让我们可以使用独立可复用的小组件来构建大型应用. 基本 一.组件注册 1.通过Vue.extend()创建,然后由component来

Vue学习日记(四)——Vue状态管理vuex

前言 先说句前话,如果不是接触大型项目,不需要有多个子页面,不使用vuex也是完全可以的. 说实在话,我在阅读vuex文档的时候,也很难以去理解vuex,甚至觉得没有使用它我也可以.但是直到我在项目碰到下面这些问题: 当路由切换的时候,原本路由的数据太多,传递过去太麻烦. 有些数据是多个路由需要用到的,那我就需要从后台获取多次数据 当然,这些问题都可以解决,就是在实例化vue对象的时候,就将这些数据绑定在window对象上面.但是我们也不得不设想: 万一数据太多了,那么可阅读性是不是会下降 如果

vue学习之二

百度下拉框 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="./lib/bootstrap.min.css"> <script src="./li

Vue学习日记(三)——Vue路由管理vue-router

前言 为了给读者更好的体验,去理解vue-router和下一篇介绍vuex,决定还是来一个实战教程来带大家更加的去深入理解vue-router,在这之前,读者先自行了解和去官网下载npm和node,附:npm官网 项目构建 这里我采用vue-cli+webpack构建初始项目,在vue官网里面也有相关介绍,在这里我就手把手教大家一下吧,先通过控制台进入相关的文件目录下,然后输入 # 后面是注释 # $表示当前文件目录 # 全局安装 vue-cli $ npm install --global v

vue学习日记02

双向绑定 双向绑定一直都是vue的卖点.举个栗子如下图. 我们在data中写入了值为 hello world 的 msg.并绑定到输入框input 和 div 中.这个时候,input 和 div中显示的内容都为  hello world,在当我们修改input里的值的时候,div也会跟着一起修改. 可以看到,当我们的数据更新的时候,我们的视图也会更新.同样的,当视图更新了,我们的数据也会跟着更新. 这儿 v-model 其实是一种语法糖.官网上有说明如下: v-model 就相当于,先将inp

springboot+springcloud+vue学习(二)

json 接口开发: @DeleteMapping @PostMapping 获取body中的实体(@RequestBody) @GetMapping("/assent/{name}") 获取路径中的参数(@PathVariable) log日志配置: logging.path=/user/local/log logging.level.com.favorites=DEBUG logging.level.org.springframework.web=INFO logging.leve