背景叙述

渐进式 JavaScript 框架

  • 易用:已经会了 HTML、CSS、JavaScript?即刻阅读指南开始构建应用!
  • 灵活:不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。
  • 高效:20kB min+gzip 运行大小超快虚拟 DOM 最省心的优化

上述是 Vue.js 官网网站给出的该前端框架的特点,而对于我这个一开始就是做 WPF 开发的 C# 程序员来说,则看上了它的 MVVM,所以,打算认真学习一下。由于 Vue 是一个前端框架,所以在开发的过程中必然会涉及到 Html、js、css。

安装

用 script 引用

选择合适版本的 vue.js 将其下载至本地,在相应页面中的 head 元素中添加下述语句:

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

使用 CDN 方式引用

在页面中的 head 标签中添加下述语句:

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

NPM 方式(构建大型项目时推荐:CLI)

要想使用 NMP 方式,首先需要确保本机已经安装了 NodeJS (下载地址)工具,可通过执行 npm -v 查看是否以安装,安装好之后可参考下述命令进行 vue 的安装

# 安装 cnpm 并 修改 npm 的镜像服务器
npm install -g cnpm --registry=https://registry.npm.taobao.org # 全局安装 vue
cnpm install -g vue-cli # 或者全局安装 Vue CLI 3
npm install -g @vue/cli # 如果无法正常安装请尝试清理缓存
npm cache clean --force # 验证是否安装成功
vue -V # 创建 vue 项目
vue init webpack project-name # 或者通过 Vue CLI 3 创建项目
vue create project-name # install dependencies
npm install # serve with hot reload at localhost:8080
npm run dev # build for production with minification
npm run build # build for production and view the bundle analyzer report
npm run build --report # run unit tests
npm run unit # run e2e tests
npm run e2e # run all tests
npm test

后续补充,暂时先知道这么用就行。

一个简单的例子

<!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">
<script src="./vue.js"></script>
<title>Vue</title>
</head> <body>
<h1 id="app">{{msg}}</h1>
<script>
new Vue({
el: "#app",
data: {
msg: "Hello world"
}
})
</script>
</body> </html>

挂载点、模板、实例

挂载点

是指 vue 实例中 el 属性对应的 Dom 节点, vue 只会处理挂载点下的 Dom 元素。类似 WPF 中 View 层 Element source。

模板

在挂载点内部的内容统一称之为模板。有两种使用方式

方式 1

<body>
<div id="app">
<h1>你好: {{msg}}</h1>
</div>
<script>
new Vue({
el: "#app",
data: {
msg: "Hello world"
}
})
</script>
</body>

方式 2

<body>
<div id="app">
</div>
<script>
new Vue({
el: "#app",
template:"<h1>你好: {{msg}}</h1>",
data: {
msg: "Hello world"
}
})
</script>
</body>

方式 2 中 template 需要包含 Dom 元素,否则无法显示。

实例

对应一个 Vue 实例

三者关系

实例 用于创建数据上下文,模板 定义了数据上下文显示的样式,挂载点 指定了数据上下文显示的位置。

数据、事件、方法

数据

位于 vue 实例中的 data 节点。有下述几种方式来表示:

方式 1

<body>
<div id="app">
<h1>{{number}}</h1>
<h1 v-text="number"></h1>
<h1 v-html="number"></h1>
</div>
<script>
new Vue({
el: "#app",
data: {
number: 123
}
})
</script>
</body>

方式 2

<body>
<div id="app">
<h1>{{string}}</h1>
<h1 v-text="number"></h1>
<h1 v-html="content"></h1>
</div>
<script>
new Vue({
el: "#app",
data: {
string: "hello world",
number: 123,
content: "<h1>Hello</h1>"
}
})
</script>
</body>

v-text 会将内容进行转义,v-html 会将内容进行转义;动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值 v-html,绝不要对用户提供的内容使用插值。

事件与方法绑定

<body>
<div id="app">
<div v-on:click="handleClick">{{content}}</div>
</div>
<script>
new Vue({
el: "#app",
data: {
content: "Hello"
},
methods: {
handleClick: function () {
this.content = "world"
}
}
})
</script>
</body>

简写方式

<body>
<div id="app">
<div @click="handleClick">{{content}}</div>
</div>
<script>
new Vue({
el: "#app",
data: {
content: "Hello"
},
methods: {
handleClick: function () {
this.content = "world"
}
}
})
</script>
</body>

属性绑定和双向数据绑定

单向绑定:

<body>
<div id="root">
<div v-bind:title="title">hello world</div>
<!-- 简写方式 -->
<div :title="title">hello world</div>
</div>
<script>
new Vue({
el: "#root",
data: {
title: "this is hello world"
}
})
</script>
</body>

双向绑定

<body>
<div id="root">
<input v-model="content">
<div>{{content}}</div>
</div>
<script>
new Vue({
el: "#root",
data: {
content: "this a content"
}
})
</script>
</body>

通过使用 v-once 指令,能执行一次性地插值,当数据改变时,插值处的内容不会更新;

计算属性和侦听器

计算属性:computed

<body>
<div id="root">
姓:<input type="text" v-model="firstName"> 名:
<input type="text" v-model="lastName">
<div>{{fullName}}</div>
</div> <script>
new Vue({
el: '#root',
data: {
firstName: "",
lastName: ""
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
})
</script>
</body>

计算属性是基于它们的依赖进行缓存的。只有依赖对象属性值发生变化时才会重写计算,否则使用上次缓存的数据进行计算。类似 C# 中对对象属性操作;

侦听器:watch

<body>
<div id="root">
姓:<input type="text" v-model="firstName"> 名:
<input type="text" v-model="lastName">
<div>{{fullName}}</div>
<div v-text="count"></div>
</div> <script>
new Vue({
el: '#root',
data: {
firstName: "",
lastName: "",
count: 0
},
computed: {
//计算属性
fullName: function () {
return this.firstName + ' ' + this.lastName
}
},
watch: {
//侦听属性
firstName: function () {
this.count++
},
//侦听属性
lastName: function () {
this.count++
},
//侦听属性
fullName:function(){
this.count++
}
}
})
</script>
</body>

计算属性默认只有 getter ,不过在需要时你也可以提供一个 setter :

// ...
computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
// ...

对属性变化事件进行监听,支持对监听属性和数据属性进行监听。类似 C# 中对对象静态属性操作;除了 watch 选项之外,您还可以使用命令式的 vm.$watch API。

指令相关

指令 (Directives) 是带有 v- 前缀的特殊特性。指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论)。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。

v-if 与 v-show

<body>
<div id="root">
<div v-if="show">hello world</div>
<div v-show="show">hello world</div>
<button @click="handleClick">toggle</button>
</div>
<script>
new Vue({
el: "#root",
data: {
show: true
},
methods: {
handleClick: function () {
this.show = !this.show
}
}
})
</script>
</body>

v-if 是直接对 Dom 对象进行操作,当该指令为 false 时,会直接删除该 Dom 对象,v-show 则是通过 style 样式来对 Dom 对象进行设置;

v-for

<body>
<div id="root">
<ul>
<li v-for="item in items" :key="item">{{item}}</li>
</ul>
<ul>
<li v-for="(item, index) in items" :key="index">{{item}}</li>
</ul>
</div>
<script>
new Vue({
el: "#root",
data: {
items: [1, 2, 3]
}
})
</script>
</body>

使用 key 能提高页面渲染,需要保证每次遍历时 key 值不能出现重复;

参数与事件的绑定

v-bind 指令可以用于响应式地更新 HTML 特性:

# 参数绑定
<a v-bind:href="url">...</a>
# 事件绑定
<a v-on:click="doSomething">...</a>
  • href 是参数,告知 v-bind 指令将该元素的 href 特性与表达式 url 的值绑定;
  • doSomething 是事件,与 对应的 vue 实例 相关函数进行绑定

修饰符

修饰符 (Modifiers) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault():

<form v-on:submit.prevent="onSubmit">...</form>

缩写

  • v-bind
<!-- 完整语法 -->
<a v-bind:href="url">...</a> <!-- 缩写 -->
<a :href="url">...</a>
  • v-on
<!-- 完整语法 -->
<a v-on:click="doSomething">...</a> <!-- 缩写 -->
<a @click="doSomething">...</a>

相关参考

Vue 系列之 基础入门的更多相关文章

  1. 「译」JUnit 5 系列:基础入门

    原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...

  2. Docker 系列之 基础入门

    安装 Docker Windows 10 专业版以上版本 Docker for Windows Installer 在安装前,需要确保目标机器已经开启了硬件虚拟化和 HyperV :在安装的过程中建议 ...

  3. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  4. saltstack之基础入门系列文章简介

    使用saltstack已有一段时间,最近由于各种原因,特来整理了saltstack基础入门系列文章,已备后续不断查阅(俗话说好记性不如烂笔头),也算是使用此工具的一个总结.saltstack的前六篇文 ...

  5. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    开发环境搭建好之后,还需要一个集成开发环境也就是IDE来进行编程.这里推荐的IDE是IDEA,那个老掉牙的Eclipse还是先放一边吧,(手动滑稽). IDEA的下载地址:http://www.jet ...

  6. 【JAVA零基础入门系列】Day4 变量与常量

    这一篇主要讲解Java中的变量,什么是变量,变量的作用以及如何声明,使用变量. 那么什么是变量?对于初学者而言,可以将变量理解为盒子,这些盒子可以用来存放数据,不同类型的数据需要放在对应类型的盒子里. ...

  7. 【JAVA零基础入门系列】Day5 Java中的运算符

    运算符,顾名思义就是用于运算的符号,比如最简单的+-*/,这些运算符可以用来进行数学运算,举个最简单的栗子: 已知长方形的长为3cm,高为4cm,求长方形的面积. 好,我们先新建一个项目,命名为Rec ...

  8. 【JAVA零基础入门系列】Day6 Java字符串

    字符串,是我们最常用的类型,每个用双引号来表示的串都是一个字符串.Java中的字符串是一个预定义的类,跟C++ 一样叫String,而不是Char数组.至于什么叫做类,暂时不做过多介绍,在之后的篇章中 ...

  9. 【JAVA零基础入门系列】Day8 Java的控制流程

    什么是控制流程?简单来说就是控制程序运行逻辑的,因为程序一般而言不会直接一步运行到底,而是需要加上一些判断,一些循环等等.举个栗子,就好比你准备出门买个苹果,把这个过程当成程序的话,可能需要先判断一下 ...

随机推荐

  1. RS232、RS485和RS422

    一.232电平.TTL电平和CMOS电平        1.232电平:逻辑1:-3V--15V: 逻辑0:+3-+15V. 2.TTL电平:逻辑1:5V: 逻辑0:0V.具体是,输出高电平:VOH≥ ...

  2. 端口转发工具lcx使用两类

    lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口.它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款黑客入 ...

  3. ReactNative学习笔记(七)Navigator的使用

    前言 Navigator主要用于ReactNative中的跳转,中文文档: http://reactnative.cn/docs/0.39/using-navigators.html 懒得打字介绍更多 ...

  4. ReactNative学习笔记(三)打包、调试、运行等相关介绍

    各种命令 个人习惯在项目根目录下把一些常见命令写成bat文件,以后每次要执行什么只需要双击即可: 编译.生成.运行并启动packager(debug模式): react-native run-andr ...

  5. 微信小程序之自定义模态弹窗(带动画)实例

    1.基本需求. 实现用户自定义弹框 带动画(动画可做参靠,个人要是觉得不好看可以自定义动画) 获取弹出框的内容,自定义事件获取 2.案例目录结构 二.程序实现具体步骤 1.弹框index.wxml代码 ...

  6. Java学习笔记29(集合框架三:泛型)

    泛型的概念: 简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题 上一篇有一段这样的代码: 没有定义集合类型.迭代器类型 package demo; imp ...

  7. MySQL:字符串字段加索引

    1. 使用方式 1.1 全字段加索引 给整个字段加索引,索引存储整个字段的值. 数据量较小时,查询成本高,准确度高: 数据量较大时,比较耗费空间: 1.2 前缀索引 MySQL支持前缀索引,可以定义字 ...

  8. DispatcherServlet 的创建过程

    [参考文章]:SpringMvc 启动原理源码分析 [参考文章]:[Spring]DispatcherServlet的启动和初始化 [参考文章]:servlet 百度百科 1. servlet 生命周 ...

  9. [EXP]Microsoft Windows CONTACT - Remote Code Execution

    [+] Credits: John Page (aka hyp3rlinx) [+] Website: hyp3rlinx.altervista.org [+] Source: http://hyp3 ...

  10. 关于iscroll插件的使用

    本次项目有一个需要多信息展示,需要左右滑动的效果,查资料了解到iscroll,就拿来用,如下调用: var myscroll = new IScroll("#wrapper", { ...