Vue-Buckets-1


文章标题,强烈建议填写此选项

title: “Vue(一)-Vue介绍、示例与指令”

发布时间,强烈建议填写此选项,且最好保证全局唯一

date: 2019-07-01

是否打赏

showSponsor: true

分组名

categories:

  • VUE

Tag标签

tags:

  • vue

vue 介绍、示例与指令

vue 官方文档

1. 渐进式框架

vue 是一套构建用户界面的渐进式框架,采用自底向上增量开发的设计。
vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整。
渐进式表现:声明式渲染—组件系统—客户端路由—大数据状态管理—构建工具

2. 两个核心点

(1)响应式数据绑定:
当数据发生变化的时候,视图自动更新,即双向数据同步,原理利用了 ES6 中的 Object.definedProperty 中的 setter/getter 代理数据,监控对数据的操作
(2)组合的视图组件:
即页面最终映射为一个组件树,采用树形数据结构进行设计,方便维护,重用。

3. 虚拟 DOM

利用在内存中生成与真实 DOM 与之对应的数据结构,这个在内存中生成的结构称之为虚拟 DOM。当数据发生变化时,能够智能的计算出重新渲染组件的最小代价并应用到 DOM 操作上。

4. MVVM

MVVM 是 Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对 View 和 ViewModel 的双向数据绑定,这使得 ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定。
M:Model(数据层,也就是指数据(前端是 js))
V:View ( 也就是指 DOM 层 或用户界面 )
VM : ViewModel (处理数据和界面的中间层,也就是指 Vue)

5. 声明式渲染

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统。
渲染分为:命令式渲染和声明式渲染
命令式渲染:命令我们的程序去做什么,程序就会跟着你的命令去一步一步执行
声明式渲染 :只需要告诉程序想要什么效果,其他的交给程序来做
具体区别看如下代码,执行结果一样,实现方式不同。

<script type="text/javascript">
  var arr = [1, 2, 3, 4, 5];
  // 命令式渲染:关心每步,关心流程,用命令去实现
  var newArr = [];
  for (var i = 0, len = arr.length; i < len; i++) {
    newArr.push(arr[i] * 2);
  }
  console.log(newArr);
  // 声明式渲染:不关心中间流程,只需要关心结果和实现条件
  var arr1 = arr.map(function(item) {
    return item * 2;
  });
  console.log(arr1);
</script>
6. 安装

(1)CDN 引入

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

(2)NPM 安装

// npm node安装成功后自带
npm install vue
7. 第一个页面

(1)与所有语言一样,第一个肯定是完成输出 Hello world
(2)完整代码如下:

<!--第一步:创建文件夹及html文件-->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Vue入门之Hello world</title>
    <!--第二步:引入Vue库-->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <!--第三步:创建一个Div-->
    <div id="app">
      <!--Vue的模板的绑定数据的方法,用两对花括号进行绑定Vue中的数据对象的属性 -->
      {{message}}
    </div>
    <!--第四步:创建Vue的对象,并把数据绑定到上面创建好的div上去。-->
    <script type="text/javascript">
      var app = new Vue({
        // 创建Vue对象。Vue的核心对象。
        el: "#app", // el属性:把当前Vue对象挂载到 div标签上,#app是id选择器
        data: {
          // data: 是Vue对象中绑定的数据
          message: "Hello world", // message 自定义的数据
        },
      });
    </script>
  </body>
</html>
<!--输出结果: Hello world--->
8. 内部指令
v-if 、v-else、 v-show、v-else-if
v-if
<div v-if="firstVif">你好</div>
v-else
<div v-else>请登录后操作</div>
v-show
<div v-show="firstVif">你好</div>
v-else-if
<div v-if="type === 'A'">A</div>
<div v-else-if="type === 'B'">B</div>
<div v-else-if="type === 'C'">C</div>
<div v-else>Not A/B/C</div>
注意
  • v-if: 在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建,开销较高,在运行时条件很少改变时使用。
  • v-show:调整 css dispaly 属性,开销较小,在常频繁地切换时使用。
v-for

基本用法

<!-- 模板 -->
<div id="app">
  <ul>
    <li v-for="item in items">
      {{item}}
    </li>
  </ul>
</div>

<!--JS代码 -->
<script type="text/javascript">
  var app = new Vue({
    el: "#app",
    data: {
      items: [20, 23, 18, 65],
    },
  });
</script>

对象遍历

<!-- 模板 -->
<div id="app">
  <ul>
    <li v-for="(value, key, index) in object">
      <!--参数: value为值,key为键名,index为索引-->
      {{ index }}. {{ key }} - {{ value }}
    </li>
  </ul>
</div>

<!--JS代码 -->
<script type="text/javascript">
  var app = new Vue({
    el: "#app",
    data: {
      object: {
        firstName: "John",
        lastName: "Doe",
      },
    },
  });
</script>
v-text 、v-html

v-text

注意
  • {{xxx}}取值有个弊端,当网速很慢或 javascript 出错时,会在页面显示{{xxx}},Vue 提供的 v-text 可以解决这个问题
<div>{{ message }}</div>
<!-- 和下面的一样 -->
<div v-text="message"></div>

v-html
用于输出 html 代码

<span v-html="msgHtml"></span>
v-on

常规用法

<!--html-->
<div>本场比赛得分:{{count}}</div>
<button v-on:click="add">加分</button>

<!--js-->
<script type="text/javascript">
  var app = new Vue({
    el: "#app",
    data: {
      count: 1,
    },
    methods: {
      add() {
        this.count++;
      },
    },
  });
</script>

缩写(@)
指令详情的更多用法参照v-on 官方 API

<button @click="add">加分</button>
v-model

以下的 model 都需要在 data 中声明初始值:

<!--js-->
<script type="text/javascript">
  var app = new Vue({
    el: "#app",
    data: {
      count: 1,
      status: [],
      sex: "男",
      selected: "",
    },
  });
</script>
  • input
<input type="text" v-model="message" />
  • textarea
<textarea cols="30" rows="10" v-model="message"></textarea>
  • checkbox
<input type="checkbox" id="first" value="1" v-model="status" />
<label for="first">有效</label>
<input type="checkbox" id="second" value="2" v-model="status" />
<label for="second">无效</label>
<div>状态:{{status}}</div>
  • radio
<input type="radio" id="one" value="" v-model="sex" />
<label for="one"></label>
<input type="radio" id="two" value="" v-model="sex" />
<label for="one"></label>
<div>性别:{{sex}}</div>
  • select
<select v-model="selected">
  <option disabled value="">请选择</option>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<div>Selected: {{ selected }}</div>
v-bind

用于处理 html 标签的动态属性,即动态赋值。
(1)常规用法

<!--html-->
<img v-bind:src="imgSrc" width="200px" />

<!--js-->
<script type="text/javascript">
  var app = new Vue({
    el: "#app",
    data: {
      imgSrc: "http://liangxinghua.com/uploads/image/20180709/1531106987.png",
    },
  });
</script>

(2)缩写(" : ")
指令详情的更多用法参照v-bind 官方 API

<img :src="imgSrc" width="200px" />
v-pre

在模板中跳过 vue 的编译,直接输出原始值,如果在标签中加入 v-pre 就不会输出 vue 中的 data 值了

<div v-pre>{{message}}</div>
v-cloak

在 vue 渲染完指定的整个 DOM 后才进行显示。它必须和 CSS 样式一起使用

<!--CSS-->
[v-cloak] { display: none; }
<!--html-->
<div v-cloak>{{message}}</div>
v-once

只显示 DOM 第一次渲染的值,以后不改变了

<div v-once>第一次绑定的值:{{message}}</div>
9. 总结:完整示例代码

本文讲解了对 Vue 的初步了解和一些常用的基本指令,至于其他指令与用法可以去官网具体说明

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Vue入门之Helloworld</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style type="text/css">
      [v-cloak] {
        display: none;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- v-if -->
      <div v-if="isLogin">你好</div>
      <!-- v-else -->
      <div v-else>请登录后操作</div>
      <!-- v-show -->
      <div v-show="isLogin">你好</div>
      <!-- v-else-if -->
      <div v-if="type === 'A'">A</div>
      <div v-else-if="type === 'B'">B</div>
      <div v-else-if="type === 'C'">C</div>
      <div v-else>Not A/B/C</div>
      <!-- v-for基本使用 -->
      <ul>
        <li v-for="item in items">
          {{item}}
        </li>
      </ul>
      <!-- v-for高级使用 -->
      <ul>
        <li v-for="(value, key, index) in object">
          {{ index }}. {{ key }} - {{ value }}
        </li>
      </ul>
      <!-- v-text -->
      <div v-text="message"></div>
      <!-- v-html -->
      <div v-html="msgHtml"></div>
      <!-- v-on部分 -->
      <div>本场比赛得分:{{count}}</div>
      <!-- 常规写法 -->
      <button v-on:click="add">加分</button>
      <!-- @缩写 -->
      <button @click="add">加分</button><br />
      <!-- v-model input -->
      <input type="text" v-model="message" /><br />
      <!-- v-model textarea -->
      <textarea cols="30" rows="10" v-model="message"></textarea><br />
      <!-- v-model checkbox -->
      <input type="checkbox" id="first" value="1" v-model="status" />
      <label for="first">有效</label>
      <input type="checkbox" id="second" value="2" v-model="status" />
      <label for="second">无效</label>
      <div>状态:{{status}}</div>
      <!-- v-model radio -->
      <input type="radio" id="one" value="" v-model="sex" />
      <label for="one"></label>
      <input type="radio" id="two" value="" v-model="sex" />
      <label for="one"></label>
      <div>性别:{{sex}}</div>
      <!-- v-model select -->
      <select v-model="selected">
        <option disabled value="">请选择</option>
        <option>A</option>
        <option>B</option>
        <option>C</option>
      </select>
      <div>Selected: {{ selected }}</div>
      <!-- v-model select -->
      <img v-bind:src="imgSrc" width="200px" /><br />
      <img :src="imgSrc" width="200px" /><br />
      <!-- v-pre -->
      <div v-pre>{{message}}</div>
      <!-- v-cloak -->
      <div v-cloak>{{message}}</div>
      <!-- v-pre -->
      <div v-once>第一次绑定的值:{{message}}</div>
    </div>
    <script type="text/javascript">
      var app = new Vue({
        el: "#app",
        data: {
          isLogin: false,
          type: "A",
          items: [20, 23, 18, 65],
          object: {
            firstName: "John",
            lastName: "Doe",
          },
          message: "hello Vue",
          msgHtml: "<h2>hello Vue!</h2>",
          count: 1,
          status: [],
          sex: "男",
          selected: "",
          imgSrc:
            "http://liangxinghua.com/uploads/image/20180709/1531106987.png",
        },
        methods: {
          add() {
            this.count++;
          },
        },
      });
    </script>
  </body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值