简简单单的Vue2(简单语法,生命周期,组件)
既然选择了远方,便只顾风雨兼程! __HANS许
系列:零基础搭建前后端分离项目
在上面文章,我们简单的讲了前端框架的工程化,也就是MVVM,还有特别聊了下VUE的双向绑定机制,那这篇文章我们就来讲讲Vue的语法与特点,路由与插件,方便大家可以直接上手。
介于是基础的嘛,可能来看的,没接触过前端,那可以先去看看我的前端系列,当然顾忌到大家可能是从JQuery的时代过来的,我的例子就直接没有使用前端目录那样子了,每个例子一个一HTML,直接引用Vue.js,链接走起:像JQuery一样引用的Vue例子(可以直接在目录之前加上 "https://xhl592576605.github.io/markdown/" 就可以直接看到效果了)
简单入手
首先要使用某个JS,肯定是要引用的JS,
- 直接开发,可一直直接
<script src="https://unpkg.com/vue"></script>- 前端流行开发,
npm i vue&&import Vue from "vue";- 这样就可以开始使用了。
来个例子
<div id="app">
{{ message }}
</div>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
这样在浏览器就可以看到
Hello Vue!的字样了生命周期
咦,怎么不讲语法等等呢,怎么直接跳到生命周期呢?我只能说语法这种大多类似,也很多,大家看下就会了,讲生命周期,是觉得他比较重要。
例子:https://xhl592576605.github.io/markdown/零基础搭建前后端分离项目/Code/Vue/sample/4生命周期.html
大家可以F12可以看下效果,如果有装vue-devtools,可以试着改下值,然后再看下输出:
每个东西其实都是有生命的,一次生命,一次周期
生命周期是由你想创建一个实例开始的,生命周期很简单,都是在你做某件事前,会先执行一件(系列)事,然后再执行真正的操作。最后会再执行一件(系列)的事,最后会走上消亡。获取做事情之前还会被先劫持一会,做一些特殊操作,如判断,最后还是会回到正轨上来。
所以Vue的生命周期也很简单,它由一系列的函数函数构成,它会在他们的周期,也就适当的时候被调用。
new Vue({
el: '#app',
data: { message: "Hello Word!" },
beforeCreate: function () {
console.info(`在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。` + new Date().toLocaleString())
console.log(this)
},
created: function () {
console.info(`在实例创建完成后被立即调用。在这一步,实例已完成以下的配置: 数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。` + new Date().toLocaleString())
console.log(this)
},
beforeMount: function () {
console.info(`在挂载开始之前被调用:相关的 render 函数首次被调用。该钩子在服务器端渲染期间不被调用。` + new Date().toLocaleString())
console.log(this)
},
...
})
下面是生命周期钩子函数的表格:
组件
或许你玩过其他框架,或许你玩过微信小程序,或许你玩过支付宝小程序,再或者你玩过钉钉小程序,好吧,你都玩过-_-,他们都是有组件化的概念的。那Vue也有。
Vue组件,就是可以复用的Vue实例。
组件的Data必须是函数
例子:https://xhl592576605.github.io/markdown/零基础搭建前后端分离项目/Code/Vue/sample/5组件化应用构建.html
创建组件
// 定义一个名为 button-counter 的新组件
Vue.component('button-counter', {
data: function () {
return {
count: 0
}
},
template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
})
<div id="components-demo">
<button-counter></button-counter>
</div>
new Vue({ el: '#components-demo' })
这样就创建了一个组件,并且使用了。组件有分全局注册与局部注册。顾名思义就是,全局都可以用,局部只有在器实例底下可以使用。
- 全局
Vue.component('component-a', { /* ... */ })
Vue.component('component-b', { /* ... */ })
Vue.component('component-c', { /* ... */ }) new Vue({ el: '#app' })
- 局部
new Vue({
el: '#app',
components: {
'component-a': ComponentA,
'component-b': ComponentB
}
})
- 全局
那大家都知道,有组件的概念,肯定就是子父组件的传值,Vue是靠
Prop给子组件传值,而子组件是靠event给父组件传值的
- Prop
值得注意HTML 中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名
例子:https://xhl592576605.github.io/markdown/零基础搭建前后端分离项目/Code/Vue/sample/7子父组件的数据传递.html
简单例子
Vue.component('blog-post', {
props: ['popTitle'],
template: '<h3>{{ title }}</h3>'
})
<blog-post pop-title="My journey with Vue"></blog-post>
<blog-post pop-title="Blogging with Vue"></blog-post>
<blog-post pop-title="Why Vue is so fun"></blog-post>
类型与验证
可以看到下面,很明显type为类型,default为默认值,validator为验证。Vue.component('my-component', {
props: {
// 基础的类型检查 (`null` 匹配任何类型)
propA: Number,
// 多个可能的类型
propB: [String, Number],
// 必填的字符串
propC: {
type: String,
required: true
},
// 带有默认值的数字
propD: {
type: Number,
default: 100
},
// 带有默认值的对象
propE: {
type: Object,
// 对象或数组默认值必须从一个工厂函数获取
default: function () {
return { message: 'hello' }
}
},
// 自定义验证函数
propF: {
validator: function (value) {
// 这个值必须匹配下列字符串中的一个
return ['success', 'warning', 'danger'].indexOf(value) !== -1
}
}
}
})
单向数据
所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。
- 自定义事件
在了解自定义事件,需要先了解
$emit这个函数,这个函数由Vue实例调用,是触发一个事件。然后我们可以使用v-on来监听
例子:https://xhl592576605.github.io/markdown/零基础搭建前后端分离项目/Code/Vue/sample/8组件的事件传递数据.html
<button v-on:click="$emit('enlarge-text')">
Enlarge text
</button>
<blog-post
...
v-on:enlarge-text="postFontSize += 0.1"
></blog-post>
- 插槽
slot我觉得大家也应该不陌生,也就插槽,插槽可以定在在组件模板的任意位置,在使用组件的时候,需要插在组件内部的内容,也就插槽,就是让开发自己定义的,值得一提,插槽是有名字的,名字不能重复,没有名字的为默认插槽,一个组件且只有一个默认的。
组件内部
<a
v-bind:href="url"
class="nav-link"
>
<slot></slot>
</a>形成内容
<navigation-link url="/profile">
<!-- 添加一个 Font Awesome 图标 -->
<span class="fa fa-user"></span>
Your Profile
</navigation-link>
具名插槽
<div class="container">
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>
那这边文章就将这些吧 ,这些较为基础,也最有用。都离不开他们的。
简简单单的Vue2(简单语法,生命周期,组件)的更多相关文章
- Vue2.0 探索之路——生命周期和钩子函数的一些理解
前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什 ...
- Vue2.0 探索之路——生命周期和钩子函数的一些理解 - JS那些事儿
在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什么,这 ...
- 一起学习vue源码 - Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
- 你还不知道Vue的生命周期吗?带你从Vue源码了解Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
- Tomcat 源码分析(一)——启动与生命周期组件
写在前面的话:读Tomcat源码也有段时间了,大领悟谈不上.一些小心得记录下来,供大家参考相护学习. 一.启动流程 Tomcat启动首先需要熟悉的是它的启动流程.和初学者第一天开始写Hello Wor ...
- vue的生命周期(又称钩子函数)----以及vue1.0版本与vue2.0版本生命周期的不同
vue生命周期 1. vue1.0版本与vue2.0版本生命周期的不同 vue1.0版本生命周期图示 图1 vue1.0版本生命周期 vue1.0版本的生命周期: init 实例创建之前 creat ...
- Vue2.0关于生命周期和钩子函数
Vue生命周期简介: Vue1.0+和Vue2.0在生命周期钩子上的区别还是很大的,如下: 代码验证: <!DOCTYPE html> <html> <head& ...
- vue2和vue3生命周期的区别
概念 首先,我们了解一下"生命周期"这个词.通俗的来说,生命周期就是一个事务从出生到消失的过程.例如,一个人从出生到去世.在vue中,vue的生命周期是指,从创建vue对象到销毁v ...
- python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)
昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...
- vue2.0 之 生命周期
一.vue1.x与vue2.x生命周期的变化区别及含义表(图表摘自网络) 二.vue2.x生命周期图和各阶段具体含义 beforecreated:el 和 data 并未初始化 created: ...
随机推荐
- DB2数据库操作XMl字段
1.xml查询语句 ① 查询xml中的单个节点内容 select TM_PRM_OBJECT.ORG , TM_PRM_OBJECT.PARAM_CLASS , TM_PRM_OBJECT.PARAM ...
- 带logo图片或不带logo图片的二维码生成与解析,亲测成功
最近公司需要实现二维码功能,本人经过一顿百度,终于实现了,因有3个功能:不带logo图片.带logo图片.解析二维码,篇幅较长,请耐心读之,直接复制粘贴即可. 前提:myeclipse10:jar包: ...
- Brown Mood Median Test
Brown-Mood Median Test 对于两独立样本尺度中的位置参数(中位数)检验问题: \(H_0: med_x = med_y\) \(H_1=med_x > med_y\) 在 ...
- appium-desktop录制脚本二次开发,生成我司自动化脚本
目的 通过对appium-desktop脚本录制功能进行二次开发,使录制的java脚本符合我司自动化框架要求. 实现步骤 1.增加元素名称的输入框 由于ATK(我司自动化测试框架)脚本中元素是以“ap ...
- Boosting(提升方法)之GBDT
一.GBDT的通俗理解 提升方法采用的是加法模型和前向分步算法来解决分类和回归问题,而以决策树作为基函数的提升方法称为提升树(boosting tree).GBDT(Gradient Boosting ...
- sau交流学习社区--看小说的lovebook一个无线端BS应用
一.前言 loveBook爱上阅读,是一款webapp的读小说等书籍的并且阅读的应用.如果觉得可以,欢迎fork和star. 自己最近在追斗破苍穹电视剧,下班时候在地铁上总听到有人说,斗破苍穹书籍比电 ...
- 基于ITextSharp插件在ASP.NET MVC中将图表导出为PDF
样本: 在这个示例中,我们使用的是微软给我们提供的数据库,也就是家喻户晓的Northwind数据库.要下载Microsoft的免费样本Northwind数据库,您需要访问以下URL.下载Northwi ...
- Java工程师必备书单
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- 强化学习(十七) 基于模型的强化学习与Dyna算法框架
在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...
- zookeeper源码 — 一、单机启动
zookeeper一般使用命令工具启动,启动主要就是初始化所有组件,让server可以接收并处理来自client的请求.本文主要结构: main入口 配置解析 组件启动 main入口 我们一般使用命令 ...