vue

1.前端开发规范

2.基础介绍

前端框架的发展史

  1. html css + div
  2. js 加入 jquery
  3. MVC angular1.0 react
  4. vue 微信小程序

vue.js第一次使用

1.什么是框架?什么是库?

框架是有一套自己的生态系统的,库是没有自己的生态系统,他就是一个工具

封装库

匿名函数 + 严格模式

  1. 没有名字,那么无法再外部通过函数名使用或是操作这个函数,那么相对来说比较稳定,安全

  2. 严格模式使用,让这个匿名函数的语法更加的标准和严格

格式:

( function ( 形参1 , 形参2 ...) {})( 实参1, 实参2 ...)
第一个括号是用来定义匿名函数,第二个括号是用来运行这个匿名函数

三个代码:

第一行: 不导出object 也不导出 undefined

第二行, 如果我们想模块化引用Vue,那么我们要通过amd将Vue函数定义为模块

第三行, 如果我们想将Vue作为全局变量使用,那么我们将Vue挂在在window对象身上

(function ( global , factory ) {
  'use strict'
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = global || self, global.Vue = factory());
})( this,function () {

  function Yyb () {

  }

  // 原型

  Yyb.prototype.init = function() {
    console.log( 'yyb' )
  }


  return Yyb

})

  1. jsx( javascript + xml )

  2. 总结vue.js第一次使用

  • 使用script标签引入Vue.js
  • 实例化全局暴露的变量Vue构造器函数得到一个实例
  • 配置Vue构造器函数中的配置项,一个配置项一个功能
    • el -- 将id为app的一部分DOM结构当做模板传入配置项,然后挂载在页面中
    • data -- 用来定义数据的
  • 将数据展示在视图中,通过使用 双大括号语法 ( mustache 语法 ) 来展示数据
  • 这时候我们发现在我们的模板(DOM结构)中可以使用 javascript语法,那么我们把这个类型称之为 'jsx语法糖'
  • 当我们将数据修改后发现,视图就会更新,这种情况我们称之为‘数据驱动(视图)’
  1. 既然Vue是一个框架, 那么它使用了什么架构模式?
  • 目前我们市面上基本上是以 MVC 这个架构思维 为主

  • Vue使用 MVC 的衍生的模式,这个模式叫做 MVVM

  • MVC

  • Backbone.js

  • MVP

  • MVVM

  • 名词解释:

    • M Model 表示数据
    • V View 表示视图
    • P/C/VM Presenter/Controller/ViewModel(视图模型) 表示就是逻辑
  • Vue使用的是MVVM

  • Vue中 VM改变,那么 V也会改变 , 反之也是一样的, 我们称之为 '双向数据绑定'

  • 数据驱动/ 双向数据绑定的原理 / 深入响应式的原理

    当我们将数据写在data选项时, Vue会通过observer将data对象中的所有的属性都设置上getter和setter

    当我们将数据绑定在视图时,自动触发getter,会将默认值,展示在视图
    当我们通过视图修改数据是, 会自动触发setter,将数据修改,同时视图也会发生更新

vue实例

<!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>
  <div id="app">
    <p> {{ msg }} </p>
  </div>

  
</body>
<script src="./vue.js"></script>
<script>

  /* 
    M   options中的  data 选项
    V   el
    VM  ViewModel 视图模型    vm
  */

  var vm = new Vue({
    el: '#app',
    data: {
      msg: 'hello Vue.js'
    }
  })
</script>
</html>

双向数据绑定:

<!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>
  <div id="app">
    <h3> VM 变 V 跟着变 </h3>
    <p> {{ msg }} </p>
    <h3> V变 Vm也跟着变 </h3>
    <input type="text" v-model = "msg">
  </div>
</body>
<script src="./vue.js"></script>
<script>
  new Vue({
    el: '#app',
    data: {
      msg: 'hello Vue.js '
    }
  })
</script>
</html>

数据绑定原理:

<!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 type="text">
  <div class="box"></div>
</body>

<script>
  /* 
    - 数据驱动/ 双向数据绑定的原理 / 深入响应式的原理

      V  -> VM 

      VM -> V

      这个是使用了es5中的一个特性,这个特性叫做 Object.definedPropty( obj, 对象的属性, 配置项)

      Object.definedPropty
        配置项: 
          1. 属性是否可写
          2. 属性是否可以遍历
          3. 存储器
            get 函数 和 set 函数       也称之为  getter  &&  setter

      数据 驱动只和存储器有关系
  
  */

    var box = document.querySelector('.box')
    var input = document.querySelector('input')
    var obj = {
      a: ' I love you '
    }

    Object.defineProperty( obj , 'a' , {
      get () {
        return 'I do not love you ' //设置当前属性的初始值
      },
      set ( value ) {
        console.log( value )
        box.innerHTML = value
        console.log( obj )
      }
    })
    input.onchange = function () {
      obj.a = input.value
      return ;
    }
    box.innerHTML = obj.a

</script>
</html>