Vue框架介绍

中文文档: https://cn.vuejs.org/v2/guide/

Vue是一个构建数据驱动的web界面的渐进式框架。

目标是通过尽可能简单的API实现响应式的数据绑定和组合的视图组件。

能够构建复杂的单页面应用。现在我们开始认识一下Vue~

// HTML 页面
<div id="app">
<span>你的名字是{{name}}</span>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="../js/main.js"></script> // main.js 页面
var app = new Vue({
el: '#app',
data: {
name: "Gao_Xin"
}
});

Vue demo

Vue指令

Vue的指令directives很像我们所说的自定义属性,指令是Vue模板中最常用的功能,

它带有v-前缀,功能是当表达式改变的时候,相应的行为作用在DOM上。

<template>
<div>
<h2>head</h2>
<p v-text="msg"></p>
<p v-html="html"></p>
</div>
</template> <script>
export default {
name: "head",
data(){
return {
msg: "消息",
html: `<h2>插入h2标题</h2>` }
} }
</script> <style scoped> </style>

v-test v-html

// HTML页面
<div id="app">
<label>

<input type="checkbox" v-model="sex" value="male">
// <input type="radio" v-model="sex" value="male">
</label>
<label>

<input type="checkbox" v-model="sex" value="female">
</label>
{{sex}}
</div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="../js/main.js"></script> // main.js 页面 var app = new Vue({
el: '#app',
data: {
// sex: "male",
sex: [],
}
});

v-model input

// HTML 页面
<div id="app">
<div>
<texteare v-model="article">
</texteare>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="../js/main.js"></script>
// main.js 页面
var app = new Vue({
el: '#app',
data: {
// sex: "male",
sex: [],
article: "这是一段文本。。这是一段文本。。这是一段文本。。这是一段文本。。这是一段文本。。"
}
});

v-model textarea

// HTML页面
<div id="app">
<!--<select v-model="from">-->
<!--<option value="1">单选1</option>-->
<!--<option value="2">单选2</option>-->
<!--</select>-->
<!--{{from}}-->
<select v-model="where" multiple="">
<option value="1">多选1</option>
<option value="2">多选2</option>
<option value="3">多选3</option>
</select>
{{where}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="../js/main.js"></script>
// main.js 页面
var app = new Vue({
el: '#app',
data: {
from: null,
where: [],
}
});

v-model select

//  需求是展示一个人的所有爱好 以及喜欢吃的食物和价格
// HTML 页面
<div id="app">
<div>
<span>你的爱好是</span>
<ul>
<li v-for="hobby in hobby_list">{{hobby}}</li>
</ul>
</div>
<div>
<span>你喜欢的食物</span>
<ul>
<li v-for="food in food_list">{{food.name}}: 价格¥{{food.discount ? food.price*food.discount: food.price}}</li>
</ul>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="../js/main.js"></script>
// main.js
var app = new Vue({
el: '#app',
data: {
hobby_list: ["王者毒药","LOL","吃鸡"],
food_list: [
{
name: "葱",
price: 5,
discount: .8,
},
{
name: "姜",
price: 8,
// discount: .5 }
],
}
});

v-for

// 我们常常见到博客中评论回复的时候 @某某某
// 我们点击这个用户是能够跳转的 那么这个应该是个动态的
// 我们就需要给标签属性进行动态绑定 v-bind
// HTML页面
<style>
.active {
background: red;
}
</style>
<div id="app">
<div>
<!--<a v-bind:href="my_link">点我</a>-->
<a v-bind:href="my_link" :class="{active: isActive}">点我
</a>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="../js/main.js"></script>
// main.js
var app = new Vue({
el: '#app',
data: {
my_link: "http://baidu.com",
isActive: true,
}
});

v-bind

// 那我们以前的事件绑定在vue中是怎么做到的呢
// HTML页面
<div>
<span>事件</span>
<button v-on="{mouseenter: onMouseenter, mouseleave: onMouseleave}" v-on:click="onClick(1)">点我</button>
</div>
<div>
<input type="text" v-on="{keyup: onKeyup}">
</div>
// main.js
var app = new Vue({
el: '#app',
data: {
my_link: "http://baidu.com",
isActive: true,
},
methods: {
onClick: function (a) {
alert(a)
},
onMouseenter: function () {
console.log("mouse enter")
},
onMouseleave: function () {
console.log("mouse leave")
},
onKeyup: function () {
console.log("key up")
}
},
});

v-on

// 我们之前写过权限 我们现在模拟一个简单的权限
// HTML页面
<div>
<div v-if="role == 'admin' || 'super_admin'">管理员你好</div>
<div v-else-if="role == 'hr'">待查看简历列表</div>
<div v-else> 没有权限</div>
</div>
// main.js 页面
var app = new Vue({
el: '#app',
data: {
role: 'admin',
// role: 'hr',
},
});

v-if v-else-if v-else

// 现在我们要实现一个功能 点击一个按钮显示文本 再点击取消
// 这种显示和隐藏的功能 vue也帮我们进行了封装
// HTML页面
<div id="app">
<button @click="on_click()">
点我
</button>
<p v-show="show">提示文本</p>
</div>
// main.js 页面
var app = new Vue({
el: '#app',
data: {
show: false,
},
methods: {
on_click: function () {
this.show = !this.show
}
} });

v-show

//  我们现在要获取用户的注册信息
// 用户名以及手机号 用指令修饰符能够让我们更加便捷
// HTML 页面
<div>
用户名: <input type="text" v-model.lazy.trim="username"><br>
{{username}}
手机号: <input type="text" v-model.number="phone"><br>
{{phone}}
</div>
// main.js 页面
var app = new Vue({
el: '#app',
data: {
username: "",
phone: "",
},
});

指令修饰符

// 我们现在有个需求 点击元素 让这个元素在浏览器窗口钉住
// 我们只需自定义一个指令,只要给元素绑定指令就可以
// HTML页面
<style>
.card {
border: solid 3px red;
width: 200px;
height: 100px;
background: #eeeeee;
margin-bottom: 5px;
}
</style>
<div id="app">
<div class="card" v-pin:true.bottom.right="pinned">
<button @click="pinned = !pinned">盯住/取消</button>
这是一个盒子文本内容
</div>
<div class="card">
这是一个盒子文本内容
</div>
<div class="card">
这是一个盒子文本内容
</div>
<div class="card">
这是一个盒子文本内容
</div>
<div class="card">
这是一个盒子文本内容
</div>
<div class="card">
这是一个盒子文本内容
</div>
<div class="card">
这是一个盒子文本内容
</div>
</div>
// main.js 页面
Vue.directive('pin', function (el, binding) {
var binded = binding.value;
var position = binding.modifiers;
var warning = binding.arg;
console.log(position)
if(binded){
el.style.position = 'fixed';
for(var key in position){
if (position[key]){
el.style[key] = '20px';
}
}
if (warning === 'true'){
el.style.background = '#666'
} }
else {
el.style.position = 'static';
el.style.background = "#eeeeee"
}
});
new Vue({
el: '#app',
data: {
pinned: false,
}
});

自定义指令以及修饰符和参数

Vue获取DOM元素

<style>
.box {
width: 200px;
height: 200px;
border: solid 1px red;
}
</style> </head>
<body>
<div id="app">
<div class="box" ref="my_box">
这是一个盒子
</div>
</div> <script>
const app = new Vue({
el: "#app",
mounted(){
this.$refs.my_box.style.color = "red";
}
})
</script> </body>

获取DOM

Vue计算属性

我们的模板表达式非常的便利,但是逻辑复杂的时候,模板会难以维护,vue提供了计算属性。

我们用方法也能达到效果,那么我们为什么要用计算属性呢~

其实在vue中方法和计算属性达到的效果是一样的,但是计算属性是基于依赖进行缓存的,

只有依赖的数据发生改变的时候,才会重新执行计算属性的函数,每次调用都会从缓存中拿之前算好的数据。

而方法是每调用一次,执行一次。

// 现在我们有一个成绩的表格 来计算总分和平均分
// HTML页面
<div id="app">
<table border="1">
<thead>
<th>学科</th>
<th>分数</th>
</thead>
<tbody>
<tr>
<td>数学</td>
<td><input type="text" v-model.number="math"></td>
</tr>
<tr>
<td>物理</td>
<td><input type="text" v-model.number="physics"></td>
</tr>
<tr>
<td>英语</td>
<td><input type="text" v-model.number="english"></td>
</tr>
<tr>
<td>总分</td>
<!--<td>{{math+physics+english}}</td>-->
<td>{{sum}}</td>
</tr>
<tr>
<td>平均分</td>
<!--<td>{{Math.round((math+physics+english)/3)}}</td>-->
<td>{{average}}</td>
</tr>
</tbody>
</table>
</div>
// js 页面
var app = new Vue({
el: '#app',
data: {
math: 90,
physics:88,
english: 78,
},
computed: {
sum: function () {
var total = this.math + this.physics + this.english
return total
},
average: function () {
var average_num = Math.round(this.sum/3)
return average_num
}
}
});

计算属性 computed

Vue过滤器

过滤器是在数据到达用户的最后一步进行简单的过滤处理,复杂的还是要用计算属性或者方法。

// 我们两个需求 一个是价格展示后面自动加“元”
// 单位 毫米和米的转换
// HTML页面
<div>
<p>价格展示</p>
<input type="text" v-model="price">
{{price | currency('USD')}}
</div>
<div>
<p>换算</p>
<input type="text" v-model="meters">
{{meters | meter}}
</div>
// js 代码
Vue.filter('currency', function (val, unit) {
val = val || 0;
var ret = val+ unit
return ret
}); Vue.filter('meter', function (val) {
val = val || 0;
return (val/1000).toFixed(2) + "米"
});
new Vue({
el: '#app',
data: {
price: 10,
meters: 10,
}
});

过滤器 filter

Vue 快速入门的更多相关文章

  1. vue 快速入门 系列 —— 虚拟 DOM

    其他章节请看: vue 快速入门 系列 虚拟 DOM 什么是虚拟 dom dom 是文档对象模型,以节点树的形式来表现文档. 虚拟 dom 不是真正意义上的 dom.而是一个 javascript 对 ...

  2. vue 快速入门 系列

    vue 快速入门(未完结,持续更新中...) 前言 为什么要学习 vue 现在主流的框架 vue.angular 和 react 都是声明式操作 DOM 的框架.所谓声明式,就是我们只需要描述状态与 ...

  3. vue 快速入门 系列 —— 初步认识 vue

    其他章节请看: vue 快速入门 系列 初步认识 vue vue 是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架. 所谓渐进式,就是你可以一步一步.有阶段 ...

  4. vue 快速入门 系列 —— 侦测数据的变化 - [基本实现]

    其他章节请看: vue 快速入门 系列 侦测数据的变化 - [基本实现] 在 初步认识 vue 这篇文章的 hello-world 示例中,我们通过修改数据(app.seen = false),页面中 ...

  5. vue 快速入门 系列 —— 侦测数据的变化 - [vue 源码分析]

    其他章节请看: vue 快速入门 系列 侦测数据的变化 - [vue 源码分析] 本文将 vue 中与数据侦测相关的源码摘了出来,配合上文(侦测数据的变化 - [基本实现]) 一起来分析一下 vue ...

  6. vue 快速入门 系列 —— vue 的基础应用(上)

    其他章节请看: vue 快速入门 系列 vue 的基础应用(上) Tip: vue 的基础应用分上下两篇,上篇是基础,下篇是应用. 在初步认识 vue一文中,我们已经写了一个 vue 的 hello- ...

  7. vue 快速入门 系列 —— vue 的基础应用(下)

    其他章节请看: vue 快速入门 系列 vue 的基础应用(下) 上篇聚焦于基础知识的介绍:本篇聚焦于基础知识的应用. 递归组件 组件是可以在它们自己的模板中调用自身的.不过它们只能通过 name 选 ...

  8. vue 快速入门 系列 —— vue loader 上

    其他章节请看: vue 快速入门 系列 vue loader 上 通过前面"webpack 系列"的学习,我们知道如何用 webpack 实现一个不成熟的脚手架,比如提供开发环境和 ...

  9. vue 快速入门 系列 —— vue loader 下

    其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...

  10. vue 快速入门 系列 —— vue loader 扩展

    其他章节请看: vue 快速入门 系列 vue loader 扩展 在vue loader一文中,我们学会了从零搭建一个简单的,用于单文件组件开发的脚手架.本篇将在此基础上继续引入一些常用的库:vue ...

随机推荐

  1. Web登录其实没那么简单

    1. 一个简单的HTML例子看看用户信息安全 标准的HTML语法中,支持在form表单中使用<input></input>标签来创建一个HTTP提交的属性,现代的WEB登录中, ...

  2. Linux:一位猫奴的意外逆袭

    作者:Vamei,严禁任何形式转载. 1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘.他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿 ...

  3. 2019年第一天——使用Visual Studio 2019 Preview创建第一个ASP.Net Core3.0的App

    一.前言: 全文翻译自:https://www.talkingdotnet.com/creating-first-asp-net-core-3-0-app-visual-studio-2019/ Vi ...

  4. H5 60-浮动元素排序规则

    60-浮动元素排序规则 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  5. 【学习总结】Master课程 之 虚拟化与云计算

    Section 1- Cloud Computing Introduction-云计算介绍 1-What can Cloud Computing do? - 云计算可以做什么? 服务模式:美国国家标准 ...

  6. Linux之基础知识

    在此总结使用Linux的时候,一些必须知道的基础内容,记录一下,加强记忆 一.  linux 运行级别 运行级别就是操作系统当前正在运行的功能级别.这个级别从0到6 ,具有不同的功能.这些级别在/et ...

  7. awr format

    AWR-Format工具 在Chrome高版本中配置使用AWR-Format for Chrome插件

  8. oracle创建视图时一些问题

    这几天创建视图的时候,遇见的问题. 一:创建视图的时候Oracle-报错:文字与格式字符串不匹配(ORA-01861) 我创建的时候用的 是to_date 然后我改成了to_char select X ...

  9. Mission Impossible 6

    题目:Mission Impossible 6 题目链接:http://hihocoder.com/problemset/problem/1228 题目大意: 大概就是让我们写一个代码模拟文本编辑器的 ...

  10. C# Note21: 扩展方法(Extension Method)及其应用

    前言 今天在开会时提到的一个概念,入职3个多月多注重在项目中使用C#的编程知识,一直没有很认真地过一遍C#的全部语法,当我们新人被问及是否了解Extension Method时,一时之间竟不能很通俗准 ...