简介:0基础前端菜鸟,啃了将近半月前端VUE框架,对前端知识有了初步的了解。下面总结一下这段时间的学习心得。

  文章结构

  • 前端基础
  • Vue.js简介
  • Vue.js常用指令
  • Vue.js组件
  • Vue.js之vue-router插件
  • Vue.js实战

一、前端基础

  前端发展历史和趋势

什么是前端?

前端:针对浏览器的开发,代码在浏览器运行。

后端:针对服务器的开发,代码在服务器运行。

发展历程:

前后端不分>后端MVC开发模式(前端是V)>Ajax技术诞生(异步通信,前端不再是后端的模板,可以独立得到各种数据。)>Web 2.0(动态网页,富交互,前端数据处理,前后端分离

前端 MVC 框架

前端通过 Ajax 得到数据,因此也有了处理数据的需求。

前端代码变得也需要保存数据、处理数据、生成视图,这导致了前端 MVC 框架的诞生。

MVVM 模式

前端可以做到:

  • 读写数据
  • 视图切换
  • 用户交互

这意味这 网页其实是一个应用程序(SPA: Single-page application)。

前端框架

Angular,核心是数据的 双向绑定。

React, Facebook开发的一个前端框架。

Vue.js是近几年一个很热门的前端MVVM框架。它的基本思想与 Angular 类似,Vue 的核心库只关注视图层,但是用法更简单,而且引入了响应式编程的概念。

二、Vue.js简介

  • 解耦视图与数据
  • 可复用组件
  • 前端路由
  • 状态管理
  • 虚拟DOM

Vue.js有什么不同?

如果你学过JQuery,那么你一定对操作DOM,绑定事件等原生Javascript能力非常熟悉

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dom | Test</title>
</head>
<body>
<h1>How to buy</h1>
<p title="reminder">Don't forget to buy this stuff.</p>
<ul id="purchase">
<li>Apple</li>
<li class="sale">cheese</li>
<li class="sale important">Milk</li>
</ul>
<div id= "test"> </div>
<script>
// DOM操作
var pur = document.getElementById("purchase");
var li=document.getElementsByTagName("li");
var cls=document.getElementsByClassName('sale');
// tit.setAttribute("id","hello");
var newElement = document.createElement("p");
// language=HTML
var tit=document.getElementById("test");
tit.appendChild(newElement);
newElement.innerHTML='<h1>新建P元素</h1>';
</script> </body>
</html>

  而Vue.js提供MVVM模式拆分为数据与视图两部分;我们只需关系数据的操作即可。DOM的事情VuVue帮你自动搞定;如下例实现数据的绑定:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue | Test</title>
<script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="msg" placeholder="请输入">
<p>{{msg}}</p>
</div>
<script>
// 实例Vue
var vm = New Vue({
el: '#app', // 通过el将app属性值所在元素挂载Vue实例
data: {
msg: 'hello vue'
}
})
</script>
</body>
</html>

实现过滤器例子:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue | Test</title>
<script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">
<!--<input type="text" v-model="msg" placeholder="请输入">
<p>{{msg}}</p>-->
{{data | formatDate }}
</div> <script>
var padDate = function (value) {
return value < 10 ? '0' + value :value;
}
// 实例Vue
var vm = New Vue({
el: '#app',
data: {
msg: 'hello vue',
date: new Date()
},
filters: {
formatDate: function () {
var date = new Date(value);
}
},
moubted: { },
...
})
</script>
</body>
</html>

 计算属性实例:

<template>
<div class="pageDetail">
<h1>{{msg}}</h1>
<p v-if="show">显示这段文本</p>
<!--绑定元素属性,改变属性值-->
<a v-bind:href="url">点击链接</a>
<button type="button" v-on:click="show = false">点我隐藏文本</button>
<!--绑定事件,监听事件,方法可以写在methods,this指向vue实例本身-->
<button type="button" v-on:click="showText()">点我显示文本</button>
<p>显示价格{{prices}}</p>
</div>
</template> <script>
export default{
data() {
return {
msg: 'pageDetail',
show: true,
url: 'http://www.hundsun.com',
imgUrl: '',
// prices: 10,
food: [
{
name: 'apple',
price: 200
},
{
name: 'banana',
price: 200
}
]
}
},
components: {},
methods: {
showText: function () {
return this.showf();
},
showf: function () {
this.show = true;
}
},
computed: {
prices: function () {
var prices = 0;
for (var i = 0; i < this.food.length; i++) {
prices += this.food[i].price;
}
return prices;
// console.log(this.food.length)
}
}
}
</script> <style scoped>
.pageDetail {
background-color: #fff;
}
</style>

三、Vue常用指令

指令是vue.js最常用的一项功能,带有v-的都是其指令。下面介绍一下常用指令

  • v-bind

该指令主要用法是动态更新HTML元素上的属性;与class、style等进行绑定;

同时绑定多个样式:

<div class="static" v-bind:class="{'active': isActive, 'error': isError}">
<p>我的属性class看可以改变</p>
</div>
<script>
export default{
data() {
return {
isActive: true,
isError: true
}
</script>

数组语法绑定:也即是给class绑定一个数组。

<div class="static" v-bind:class="[activeCls, errorCls]">
<p>我的属性class看可以改变</p>
</div>
<script>
export default{
data() {
return {
activeCls: 'active',
errorCls: 'error'
}
}
}

也可以利用data, computed,methods方法来绑定。

同样可以在组将上应用。

<div class="pageDetail">   
 <date v-bind:class="[activeCls, errorCls]"></date>
</div> import date from '@/components/date.vue';
export default{
data() {
    return {
    errorCls: 'error',
    activeCls: 'active'
  }
}
components: {date}
}
</script>
  • v-if  v-else-if      v-else

可以根据表达式的值销毁/渲染组件/元素,v-else-if 紧跟v-if ,v-else 紧跟v-if / v-else-if 。例如:

<div>
<h1>Test v-if指令</h1>
<p v-if="status === 1">显示v-if</p>
<p v-else-if="status === 2">显示v-else-if</p>
<p v-else="status === 1">显示v-else</p>
</div> <script> export default{
data() {
return {
status: 2
}
}
}

可以在内置的template标签内使用改指令,例如

<div>
<template v-if="type === 'name'">
<label>用户名:</label>
<input placeholder="用户名" key = "name=input">
</template>
<template v-else>
<label>邮箱:</label>
<input placeholder="邮箱" key = "mail=input">
</template>
<button @click="handleclick()">切换输入类型</button>
</div> <script>
export default{
data() {
return {
type: 'name',
status: 2
}
},
methods: {
handleclick: function () {
this.type = this.type === 'name' ? 'mail' : name;
}
}
}
  • v-show

v-show改变元素的css属性的display,不可 用在template标签内;

  • v-for

当需要将一个数组遍历和枚举一个对象循环显示时,就会用到v-for,结合in 使用。例如

<ul>
<template v-for="user in users">
<li>{{user.name}}</li>
<li>{{user.user_id}}</li>
</template>
</ul> <script>
export default{
data() {
return {
user: {
name: 'torre',
user_id: '200'
}
}
}
</script>
  • v-on

监听HTML事件,类似于原生JavaScript的onclick指令;例如

<div>
<button @click="getUserInfoFunc">commit</button>
</div> <script> export default{
methods: {
getUserInfoFunc() {
server.getUserInfo().then((res) => {
console.log(typeof res.data.list);
this.users = res.data.list;
})
}
}
}
  • v-model

表单控件在实际应用中比较常见,如单选,多选,下拉选择,输入框等,用它们可以完成数据的录入、校验、提交,v-model指令就是用于表单类元素上双向绑定数据。例如,

<template>
<div id="testvue">
<p>{{msg}}我是testvue组件</p>
<p>测试互斥按钮</p>
<input type="radio" v-model="picked" value="html" id="html"/>
<label for="html">html</label><br />
<input type="radio" v-model="picked" value="vuejs" id="js"/>
<label for="js">js</label><br />
<input type="radio" v-model="picked" value="css" id="css"/>
<label for="css">css</label><br />
<p>{{picked}}</p>
</div>
</template> <script>
export default {
data() {
return {
msg: 'hello',
picked: 'js'
}
},
methods: {
handdle: function () {
this.msg = 'hello vue'
}
},
components: {},
name: 'testvue'
}
</script> <style scoped> </style>

绑定选择列表,例如

<div id="opt">

        <select v-model="selected">
<option>html</option>
<option value="js">javascript</option>
<option >css</option>
</select>
</div> <script>
export default {
data() {
return {
msg: 'hello',
picked: 'js',
selected: 'html'
}
}, components: {},
name: 'testvue'
}
</script>

三、Vue.js组件

对一些页面中,对于固定不变的模块,我们可以对它们进行作为 一个“母版”,然后可以在其他不同的页面中来使用组件,这样的好处是只需要改变“母版”就可以改变整个web的显示,大大增加了代码的复用。

创建组件于创建Vue实例类似,需要注册后才能使用,其中包括全局注册,局部注册。

// 全局组件,在任何组件中都可以使用
Vue.component('global', {
template: '<div>我是全局组件o</div>'
}) // 局部组件,需要创建在Vue实例中,只能本组件内使用
<script>
export default {
data() {
return {
msg: 'hello',
picked: 'js',
selected: 'html'
}
},
methods: {
handdle: function () {
this.msg = 'hello vue'
}
},
// template的DOM结构必须被一个元素包含,不可直接写文本。这种注册方式也可以使用嵌套。
components: {
'my-component': {
template: '<div>我是组件</div>'

}
},

name: 'testvue'
}
</script>

组件引用外部组件需要import引入

<script>
import date from '@/components/date.vue'; export default{
data() {
return {
msg: 'pageMain',
name1: '',
id1: '',
users: '',
account: '',
passWd: ''
}
},
components: {
date
}

}
</script>
  • 组件之props传递数据

组件不仅仅用于代码(模板内容)的复用,更重要的是组件间要进行通信,类型是字符串数组和对象。

// 全局组件
Vue.component('global', {
props: ['message'],
template: '<div>我是全局组件{{message}}</div>'
})
//其他组件引用global
<global message="我是全局组件" style="color:red"></global>

props中声明的数据于组件中data()函数return的数据主要区别是props的数据来自父级,而data()中的是组件自己的数据,作用域是组件本身,这两种数据都可以在template、computed和methods中使用。

 <input type="text" v-model="parentMessage"/>
<global :message="parentMessage" style="color:red"></global>
// javascript代码
<script>
export default {
data() {
return {
msg: 'hello',
picked: 'js',
selected: 'html',
parentMessage: ''
}
}
}
  • 动态组件
<template>
<div id="app">
<button @click="handleChangeView('A')">切换到A</button>
<button @click="handleChangeView('B')">切换到B</button>
<button @click="handleChangeView('C')">切换到C</button>
<div id="views">
<component :is="currentView"></component>
</div>
</div>
</template> <script>
import first from '@/views/first.vue'
export default {
components: {
// comA: {
// template: '<div>组件A</div>'
// },
comA: first,
comB: {
template: '<div>组件B</div>'
},
comC: {
template: '<div>组件C</div>'
}
},
data() {
return {
currentView: 'comA'
}
},
methods: {
handleChangeView: function (component) {
this.currentView = 'com' + component;
}
},
name: 'App'
}
</script> <style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
#views {
height: 500px;
width: 600px;
background-color: gainsboro;
margin: auto;
}
</style>

明天继续更新

参考资料:

Vue官方文档:https://cn.vuejs.org/v2/guide/index.html

ES6: http://es6.ruanyifeng.com/#docs/module

https://github.com/ruanyf/jstraining/blob/master/docs/history.md

0基础菜鸟学前端之Vue.js的更多相关文章

  1. 前端框架vue.js系列(9):Vue.extend、Vue.component与new Vue

    前端框架vue.js系列(9):Vue.extend.Vue.component与new Vue 本文链接:https://blog.csdn.net/zeping891103/article/det ...

  2. 从零开始学 Web 之 Vue.js(四)Vue的Ajax请求和跨域

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  3. 从零开始学 Web 之 Vue.js(一)Vue.js概述,基本结构,指令,事件修饰符,样式

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  4. 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发

    每天记录一点:NetCore获得配置文件 appsettings.json   用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...

  5. 可能是目前最完整的前端框架 Vue.js 全面介绍

    Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架. 摘要 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angul ...

  6. 前端之Vue.js库的使用

    vue.js简介 Vue.js读音 /vjuː/, 类似于 view Vue.js是前端三大新框架:Angular.js.React.js.Vue.js之一,Vue.js目前的使用和关注程度在三大框架 ...

  7. 【入门篇】前端框架Vue.js知识介绍

    一.Vue.js介绍 1.什么是MVVM? MVVM(Model-View-ViewModel)是一种软件架构设计模式,它源于MVC(Model-View-Controller)模式,它是一种思想,一 ...

  8. 不会几个框架,都不好意思说搞过前端: Vue.js - 60分钟快速入门

    Vue.js——60分钟快速入门   Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理 ...

  9. 【前端】Vue.js经典开源项目汇总

    Vue.js经典开源项目汇总 原文链接:http://www.cnblogs.com/huyong/p/6517949.html Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) ...

随机推荐

  1. [BZOJ1058][ZJOJ2007]报表统计

    BZOJ Luogu 题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维 ...

  2. zjoi网络

    map加LCT水一下就过了 # include <stdio.h> # include <stdlib.h> # include <iostream> # incl ...

  3. POI导出Excel的几种情况

    第一种:常见导出[已知表头(长度一定),已知表数据(具体一个对象的集合,并已知对象各个属性的类型)]第二种:不常见导出[已知表头(长度不定),已知表数据(没有具体对象,装在String类型的集合中)] ...

  4. 【learning】莫比乌斯反演

    吐槽 额其实这个东西的话..好像缠着机房里面的dalao们给我讲过好多遍了然后.. 拖到现在才搞懂也是服了qwq(可能有个猪脑子) 感觉就是主要几条式子然后疯狂换元换着换着就化简运算了? 草稿纸杀手q ...

  5. ccd采集

  6. 读取超大Excel(39万行数据)

    有个学长需要处理Excel数据,Excel数据共有39W,将数据读取后处理并导出数据.最开始尝试了 NPOI ,发现NPOI 并不能完成该项任务,随后尝试引用的com组件:Microsoft.Offi ...

  7. 简述TCP的三次握手过程

    一.TCP报文格式   TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式         上图中有几个字段需要重点介绍下:    ...

  8. freemarker的classic_compatible设置,解决报空错误

    前段时间接触freemaker时,本来后端写各接口运行正常,但加入了模板后,频繁报空指针问题,整了许久,最后还是请教了别人解决了这个问题,现在记录下来,方便以后碰到了可以查阅. 错误样例如下: ERR ...

  9. 微信小程序学习笔记(阶段一)

    一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.co ...

  10. [模拟赛] T3 最优序列

    Description 给出一个长度为n(n<=1000)的正整数序列,求一个子序列,使得原序列中任意长度为m的子串中被选出的元素不超过k(k<=m<=10)个,并且选出的元素之和最 ...