vue介绍---Vue.js

Vue.js 是什么

是一套用于构建用户界面的 渐进式 框架.

Vue 被设计为可以 自底向上 逐层应用

Vue 的核心库只关注视图层

便于与第三方库或既有项目整合

单页面应用 --- 只有一个页面 --- (局部刷新)

组件化的开发 ----- 模块化的开发

(组件化的开发 带 结构,模块化开发 只 逻辑)

如何使用vue

  • 使用 cdn 服务器上的 vue连接 (cdn) - 初学者极力推荐

拓展: 内容分发网络,构建在现有网络基础之上的智能虚拟网络,
依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。 ------ 你需要jquery,你把jquery上传到自己的服务器请求,和使用 cdn 服务器上请求, cdn请求的优势 --- 减少了自己服务器的http请求数(性能优化),cdn服务器响应速度快 ----- 使用script的src属性直接链接即可 ------------------ 是什么,怎么样,怎么做,你是怎么做的 ---- 经验

// 开发环境下的cdn链接  -----  开发阶段
// 开发环境版本,包含了有帮助的命令行警告
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>


// 生产环境下的cdn链接  ----- 项目上线运维维护
// 生产环境版本,优化了尺寸和速度 -  没有所谓的console
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

拓展: 环境: 开发环境 + 测试环境 + 生产环境
拓展: 接口: 开发接口 + 测试接口 + 生产接口
拓展: 有的公司环境以及接口是不分的

bfb5027cf9c109163511a64976b5f81c.png

  • 使用npm模块安装(临时安装)

cnpm / npm i vue

dc6571b0edb23790ccd1591b3645c248.png
复制vue.js 以及vue.min.js至项目中
227f65d7cd065e22288a4e2dfd4a970c.png

  • 命令行工具 ---- 脚手架 ---- express --- 后续介绍

体验vue

<body>
  <div id="app">
    <h1>{{ msg }}</h1>
    <ul>
      <li v-for="item of list">{{ item }}</li>
    </ul>
    <ul>
      <li v-for="item of cartlist">
        {{ item.name }} - {{ item.price }} - {{ item.num }}
      </li>
    </ul>
    总数: {{ totalNum }}

    总价 {{ totalPrice }}
  </div>
</body>
<script>
  // 便捷 --- 无DOM操作
  new Vue({
    el: '#app',
    data: {
      msg: 'hello vue',
      list: ['a', 'b', 'c', 'd'],
      cartlist: [
        {
          name: '苹果手机',
          num: 10,
          price: 6000
        },
        {
          name: '华为手机',
          num: 5,
          price: 4000
        }
      ]
    },
    computed: {
      totalNum () {
        let num = 0 
        this.cartlist.map(item => {
          num += item.num
        })
        return num
      },
      totalPrice () {
        // 复习 数组的相关操作的方法
        return this.cartlist.reduce((sum, item) => {
          return sum + item.price * item.num
        }, 0)
      }
    }
  })
</script>

熟悉MVX

MVC / MVP / MVVM

  • MVC

model view Controller

模型 视图 控制器

模型:用户 - 用户id 用户名 联系方式 .....

视图:用户的展示形式

控制器:把数据从数据库中提取出来,供给视图

c7b243858aaee80c5e9a4d61062f69b0.png

是一种业务逻辑、数据、界面展示分离的方法的组织代码,将业务会聚集到一个部件里面,在改进和个性化定制界面及交互的同时,不需要重新编写业务逻辑

express - 数据库集合(model) + 路由(controller)+ ejs (view)

优点: 耦合性低,重用性高,生命周期成本低,部署快,可维护性高,有利于软件工程化管理

弊端:由于模型model和视图view要严格的分离,给前端程序带来了很大的困难,每次操作需要彻底的测试 ---- 方向多,问题不好找 - angualrjs --- 1系列版本 ---- 2系列以后叫angular

  • MVP ---- 设想中的一种模式

model view presenter

69f9351c984ca7fbd592f751cd7429c2.png

MVP其实就是MVC架构的一种演变。交互都发生在发布层,view跟model没有关系

各部分之间的通信 都是双向的

View 是非常薄的,不部署任何的业务逻辑,---- 被动视图

presenter 非常厚,所有的业务逻辑都在此

  • MVVM

model view viewmodel

7079756a1116d80eadfcd1f07b7588e4.png

是一种基于MVC的设计,在HTML标签上通过一些指令绑定,就能在Model 和 viewmodel保持不变的情况下,方便UI设计与业务逻辑分离,大大减少了DOM操作

model 整个应用所需要的数据模型,含有大量的信息,但并不具备任何的行为逻辑,它只是数据,不会影响浏览器的展示数据

  • 用户信息的model (姓名、年龄等属性)

view 是具有主动性的,包含了 数据的绑定、事件、行为。会影响到
model和viewmodel,负责自身的展示行为,并且还要把自身的改变同步到viewmodel。

viewmodel 看成是view之后的好帮手,他把view需要的数据暴露给他,并且赋予view一定的行为能力

---- 中介

vue数据双向绑定的原理

模板语法

插值

文本

数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:

<body>
  {{ msg }}
  <div id="app">
    {{ msg }} - {{ num }} - {{ flag }} - {{ obj.b }} - {{ arr[1] }}
  </div>
</body>
<script>
  // new Vue 实例  ----  vue的语法,包含很多的选项
  new Vue({
    el: '#app', // DOM节点,表明哪一段HTML标签内要使用Vue语法 - element
    data: { // 当前vue实例中需要使用到的初始化的数据
      msg: 'hello vue',
      num: 100,
      flag: true,
      obj: {
        a: 1,
        b: 2
      },
      arr: ['a', 'b', 'c']
    }
  })
</script>

c180a07f8d65ee9949946cc88f0834c8.png

纯HTML - 原生HTML

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令, ---- 解析 输出

v-text : 转义输出 --- 类似于 {{}}

<body>
  <div id="app">
    {{ detail }}
    <div v-html = "detail"></div>
    <div v-text = "detail"></div>
  </div>
  
</body>
<script>
  new Vue({
    el: '#app',
    data: {
      detail: '<div style="color:red;">这里就是产品的详情数据</div>'
    }
  })
</script>

2af1f5b250a105a46d95970e67b61360.png

表达式

<body>
  <div id="app">
    {{ 1 + 1 }} - {{ a + 7 }} - {{ flag ? '真': '假' }} - {{ msg.split('').reverse().join('') }} - {{ 1 + '12' }}
  </div>
  
</body>
<script>
  new Vue({
    el: '#app',
    data: {
      a: 5,
      flag: true,
      msg: 'hello'
    }
  })
</script>

指令

指令api

7e1f9de0037d3c5ba59bbbe7cdbc3e42.png

<body>
  <div id="app">
    <h2>绑定属性用 v-bind 指令</h2>
    <h1 v-bind:testattribute="test"></h1>
    <h1 :testattribute="test"></h1>
    <div :class="active"></div>
    <h2>条件判断 v-if v-else v-else-if v-show</h2>
    <h2>列表循环 v-for</h2>
    <h2>事件绑定 v-on</h2>
    <a href="https://cn.vuejs.org/v2/api/#%E6%8C%87%E4%BB%A4">vue中的指令</a>
  </div>
  
</body>
<script>
  new Vue({
    el: '#app',
    data: {
      test: '11111111111',
      active: 'active'
    }
  })
</script>

缩写

v-bind:attr="" ==> :attr=""
v-on:click="" ==> @click=""

绑定属性

参照指令章节案例

 

-------------------------------------------------------文章来自吴大勋(大勋说

 
posted @ 2020-04-20 23:22  haccer  阅读(207)  评论(0编辑  收藏  举报