Vue从零开始之Vue基础

什么是Vue?

Vue就是一个MVVM模式的实现者,MVVM最重要的就是ViewModel,ViewModel是为了实现数据的双向绑定,就是为了解耦.

  • Model:模型层,在这里表示 JavaScript 对象
  • View:视图层,在这里表示 DOM(HTML 操作的元素)
  • ViewModel:连接视图和数据的中间件,Vue.js 就是 MVVM 中的 ViewModel 层的实现者

在 MVVM 架构中,是不允许 数据 和 视图 直接通信的,只能通过 ViewModel 来通信,而 ViewModel 就是定义了一个 Observer(观察者)

  • ViewModel 能够观察到数据的变化,并对视图对应的内容进行更新
  • ViewModel 能够监听到视图的变化,并能够通知数据发生改变

Vue.js 就是一个 MVVM 的实现者,他的核心就是实现了 DOM 监听 与 数据绑定. 并且是一个渐进式框架

Vue使用

布局,语法,组件,网络

下载node.js

官网下载

兼容性

Vue 不支持 IE8 及以下版本,但它支持所有 兼容 ECMAScript 5 的浏览器。

导入文件

<!-- 开发环境版本,包含了有帮助的命令行警告,不带版本号使用最新版 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<!-- 生产环境版本,优化了尺寸和速度 ,生产环境指定版本号防止新版本出错-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>

第一个项目

html:5+tab生产h5模板

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div id="vue">
    {
  {message}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script type="text/javascript">
    var vm = new Vue({
    
        el: '#vue',
        data: {
    
            message: 'Hello Vue!'
        }
    });
</script>
</body>
</html>

说明

  • el:’#vue’:绑定元素的 ID
  • data:{message:‘Hello Vue!’}:数据对象中有一个名为 message 的属性,并设置了初始值 Hello Vue!
  • 此时就可以在控制台直接输入 vm.message=‘xxx’ 来修改值,中间是可以省略 data 的.在这个操作中,我并没有主动操作 DOM,就让页面的内容发生了变化,这就是借助了 Vue 的 数据绑定 功能实现的;MVVM 模式中要求 ViewModel 层就是使用 观察者模式 来实现数据的监听与绑定,以做到数据与视图的快速响应。

Vue 实例的生命周期

Vue 实例有一个完整的生命周期,也就是从 开始创建、初始化数据、编译模板、挂载 DOM、渲染→更新→渲染、卸载 等一系列过程

所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对 property 和方法进行运算。这意味着你不能使用箭头函数来定义一个生命周期方法 (例如 created: () => this.fetchTodos())。这是因为箭头函数绑定了父上下文,因此 this 与你期待的 Vue 实例不同,this.fetchTodos 的行为未定义。
生命周期

注意: created 钩子函数和 mounted 钩子函数的区别

钩子函数的触发时机

beforeCreate
在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。

created
实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

beforeMount
在挂载开始之前被调用:相关的 render 函数首次被调用。

mounted
el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。

beforeUpdate
数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。

updated
由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。

beforeDestroy
实例销毁之前调用。在这一步,实例仍然完全可用。

destroyed
Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

Vue常见问题

input复用问题

Vue进行DOM渲染时,出于性能的考虑,会尽可能复用已存在的元素,而不是创建新的元素.

导致删除原input渲染一个新的input的时候用户输入的信息还在.

解决:

  • 当两个input的key相同时会复用
  • 不同时会创建一个新的元素而不是复用已存在的
<span v-if="isM"><input ....  key="username"></span>
<span v-else><input ....  key="email"></span>

Vue语法

vue对象

被vue接管的属性或方法中:

  • 如果某个参数符合变量的命名规范,Vue会将其当成属性名或方法名进行解析,这时如果未定义则会产生错误(Property or method “变量” is not defined on the instance but referenced during render.).
  • 使用引号包裹,Vue就不会自行进行解析了.
<script type="text/javascript">
    var vm = new Vue({
    
        //el绑定元素id
        el: '#vue',  
        //data初始化数据, 类型为: 对象|function
           
        data: {
    
            message: 'Hello Vue!'
        },
    //data组件的定义只接受 function
        //data: function () {
    
        //    return { a: 1 }
        //},
        
        //methods初始化方法,调用方法需要带()
            //方法中使用this调用data中的数据
         methods: {
    
            sayHi: function (event) {
    
                // `this` 在方法里指向当前 Vue 实例
                alert(this.message);
            }
        },
        //过滤器,类似linux的管道流
            //使用过滤器: {
    {item.price | showPrice}}
        filters:{
    
            //过滤方法  </
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值