简介:0基础前端菜鸟,啃了将近半月前端VUE框架,对前端知识有了初步的了解。下面总结一下这段时间的学习心得。javascript
文章结构css
1、前端基础html
前端发展历史和趋势前端
什么是前端?vue
前端:针对浏览器的开发,代码在浏览器运行。java
后端:针对服务器的开发,代码在服务器运行。git
发展历程:es6
先后端不分>后端MVC开发模式(前端是V)>Ajax技术诞生(异步通讯,前端再也不是后端的模板,能够独立获得各类数据。)>Web 2.0(动态网页,富交互,前端数据处理,先后端分离)github
前端经过 Ajax 获得数据,所以也有了处理数据的需求。web
前端代码变得也须要保存数据、处理数据、生成视图,这致使了前端 MVC 框架的诞生。
前端能够作到:
这意味这 网页实际上是一个应用程序(SPA: Single-page application)。
前端框架
Angular,核心是数据的 双向绑定。
React, Facebook开发的一个前端框架。
Vue.js是近几年一个很热门的前端MVVM框架。它的基本思想与 Angular 相似,Vue 的核心库只关注视图层,可是用法更简单,并且引入了响应式编程的概念。
2、Vue.js简介
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>
3、Vue经常使用指令
指令是vue.js最经常使用的一项功能,带有v-的都是其指令。下面介绍一下经常使用指令
该指令主要用法是动态更新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-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改变元素的css属性的display,不可 用在template标签内;
当须要将一个数组遍历和枚举一个对象循环显示时,就会用到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>
监听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指令就是用于表单类元素上双向绑定数据。例如,
<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>
3、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>
组件不只仅用于代码(模板内容)的复用,更重要的是组件间要进行通讯,类型是字符串数组和对象。
// 全局组件 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