作者 | 敲出亿行bug

责编 | 夕颜

出品 | CSDN博客

Vue.js 是什么?

vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

vue实例

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统。

1、在文件中引入vue.js,下面两种方式选择其中一种

<script type="text/javascript" src="../vue.js"></script><!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

2、建立简单的vue实例对象

<div id="app">
//调用vue中的数据
<h1>{{message}}</h1>
//下面的两种书写方式结果相同
<button v-on:click="click()">click</button>
<button @click="click()">click01</button>
</div><script>
var ve=  new Vue({
el:'#app',
data:{
message:'hello',
},
methods:{
click:function(){
alert("你好,世界");
}
}
});
</script>

vue常用指令

1、v-on:绑定事件监听器,事件的类型由参数决定

例如:v-on:事件名称

或者@事件名称

2、v-if/v-else-if/v-else判断指令:根据表达式的值,进行渲染

例如:

<div id="app">
//isshow为true时,标签内的内容显示到页面
<h1 v-if="isshow">{{isshow}}ok</h1>
</div>
<script>
new Vue({
el:'#app',
data:{
message:'hello',
isshow:true,
},
methods:{
click:function(){
alert("你好,世界");
}
}
});
</script>

3、v-model:数据绑定指令(一般为表单输入绑定)

//v-model 指令在表单<input>、<textarea> 及 <select> 元素上创建双向数据绑定
<input type="text" v-model="message" />{{message}}

文本框里的内容与外面的内容绑定

4、v-for:循环(可以多层嵌套显示和java中的for循环原理一致)

v-for格式:

<li v-for=“item in items”>{{item}} </ li>

其中:item是被迭代数组元素的别名

items是源数据数组

使用 item in items 的特殊格式语法

<div id="demo">
<ul>
<li v-for="item in items">{{item}}</li>
<li v-for="item in arr1">{{item}}</li>
<li v-for="item in arr1.a">{{item}}</li>
</ul>
</div>
<script>
new Vue({
el:'#demo',
data:{
items:[23,23,344,45],
arr1:{"a":[1,2,3],"b":[2,2,3]},
},
methods:{
}
});
</script>

运行结果如图

5、v-bind:动态绑定属性

使用格式

v-bind:属性名=“data数据对象中的值”

简写

:属性名=“data数据对象中的值”

<styple>
.child{
width: 50px;
height: 50px;
background-color: gray;
color: black;
}
</style>
<div id="app">
<img v-bind:src="img" /> //动态绑定了imges属性,img改变了图片,那么img标签也会改变
<div :class="{'child':isshow}">div6</div>//div区域的显示根据isshow的值来判定</div>
<script>
new Vue({
el:'#app',
data:{
isshow:true,
img:'111.png',
}
})
</script>

生命周期函数|钩子函数

1、生命周期函数

beforecreated:加一些loading事件

created:结束loading事件,还做一些初始化,实现函数自执行

mounted:发起后端请求,取回数据

接受页面之间传递的参数

子组件向父组件传递参数

2、下面用一个生命周期函数演示的实例

<div id="demo">
<h1>{{message}}</h1>
<button @click="changemessage()">changemessage</button>
</div><script>
var ve =new Vue({
el:'#demo',
data:{
message:'vue生命周期',},
beforeCreate:function(){
console.group("------------beforecreate-----------")
console.log('el:'+this.$el)
console.log('data:'+this.$data)
console.log('message:'+this.message)
},
created:function(){
console.group("------------created-----------")
console.log('el:'+this.$el)
console.log('data:'+this.$data)
console.log('message:'+this.message)
},
beforeMount:function(){
console.group("------------beforemount-----------")
console.log('el:'+this.$el)
console.log('data:'+this.$data)
console.log('message:'+this.message)
},
mounted:function(){
console.group("------------mounted-----------")
console.log('el:'+this.$el)
console.log('data:'+this.$data)
console.log('message:'+this.message)
},
beforeUpdate:function(){
console.group("------------beforeupdate-----------")
console.log('el:'+this.$el)
console.log('data:'+this.$data)
console.log('message:'+this.message)
},
updated:function(){
console.group("------------updated-----------")
console.log('el:'+this.$el)
console.log('data:'+this.$data)
console.log('message:'+this.message)
},
beforeDestroy:function(){
console.group("------------destotry-----------")
console.log('el:'+this.$el)
console.log('data:'+this.$data)
console.log('message:'+this.message)
},
destroyed:function(){
console.group("------------destroyed-----------")
console.log('el:'+this.$el)
console.log('data:'+this.$data)
console.log('message:'+this.message)
},
methods:{
changemessage:function(){
this.message='666'
}
}
});
//销毁是在实例外面调用的
ve.$destroy()

实际的效果

点击changemessage按钮

vue组件

借用官网的一张图。

1、为什么使用组件?

使用组件一方面可以不用去直接修改标签,另一方面也会优化页面显示。

注意:组件在实例前面书写

2、全局组件

<div id="box">
{{message}}
<all></all>
</div>
<script>
Vue.component("all",{
template:'<div><h1>{{name}}</h1></div>',
// template:'#box1',
data:function(){
return{
name:'李四'
}
}
})
var ve = new Vue({
el:"#box",
data:{
message:'hello'
}
});
</script>

3、局部组件:局部组件放在实例中

父子组件可以嵌套使用

父子组件间作用域相互独立

子组件只能在父组件的模板中进行调用

子组件是父组件细化拆分的过程

父组件向子组件传值通过props进行

下面的示例中包含了父组件向子组件传值的功能

<div id="box">
<test>
</test>
</div>
<template id='box1'>
<div>
<input type="text" v-model="message" />
<box1 num="1" txt='yi' :msg="message"></box1>
<box1 num="2" txt='er' :msg="message"></box1>
</div>
</template> <script>
var ve = new Vue({
el:'#box',
data:{
},
//父級
components:{
'test':{
template:"#box1",
data:function(){
return{
message:'aaa'
}
},
//子级
components:{
'box1':{
template:"#box2",
//子级想将父级的一个值,作为自己的一个局部变量
data:function(){
return{
mymsg:this.msg
}
},
//计算属性
computed:{
mymsg1:function(){
return this.msg+'!'
}
},
props:[
'num','txt','msg'
]
}
}
}
}
})
</script>

4、自定义监听事件(子组件向父组件传值)

自定义监听事件: $emit()

传值的过程:

子组件设定了一个点击事件,点击事件中夹带着传递的值—》通过getval方法将拿到的值赋值给父组件的message—》父组件显示出message值

<div id="box">
<parent></parent>
</div>
<template id='par'>
<div>
<h1> 父组件:{{parentmsg}}||{{message}}</h1>
<child @change="getval"></child>
</div>
</template>
<template id='child'>
<div @click="fn()">
<h2>子组件:{{childmsg}}</h2>
</div>
</template>
<script>
var vm = new Vue({
el:"#box",
components:{
"parent":{
template:'#par',
data:function(){
return {
parentmsg:"父组件的信息",
message:''
}
},
methods:{
getval:function(val){
this.message = val
console.log(val)
}
},
components:{
'child':{
template:'#child',
data:function(){
return{
childmsg:'子组件的信息'
}
},
methods:{
fn:function(){
this.$emit('change',this.childmsg)
}
}
}
}
}
}
})
</script>

5、SLOT插槽(vue2.6.0之前版本使用的slot)

目的:其目的在于让组件的可扩展性更强,用来混合父组件的内容与子组件自己的模板。

分为匿名slot和具名slot

//匿名slot
<div id="box">
<my-component></my-component>
</div>
<template id='mycomponent'>
<div>
<p> 头部</p>
<slot> 如果没有分发,则默认显示</slot>
<p> 底部</p>
</div>
</template>
<script>
Vue.component('my-component',{
template:'#mycomponent'})
Vue.component('my-computer',{
template:'#mycomputer'
})
var vm = new  Vue({
el:'#box',})
</script>

//具名slot
<div id="box">
<my-computer>
<div slot='CPU'>n9000</div>
<div slot='GPU'>OOOO</div>
</my-computer>
</div>
<template id='mycomputer'>
<div>
<slot name="GPU">GPU</slot>
<slot name="CPU">CPU</slot>
<slot name="DIST">DIST</slot>
</div>
</template>
<script>
Vue.component('my-computer',{
template:'#mycomputer'
})
var vm = new  Vue({
el:'#box',
})
</script>

vue的路由设置

要引入vue-router.js库文件

作用:根据url锚点的位置,在容器中加载不同的模块,本质是作为页面导航,完成SPA(Singal Page Application)的开发。

一种特殊的web应用,它将所有活动局限于一个web页面中,仅web页面初始化时加载项应的html、JavaScript、css。

一旦页面加载完成,SPA不会因为用户的操作而进行页面的重新加载或跳转,而是利用JavaScript动态的变换HTML(采用的是div切换显示或隐藏),从而实现ui与用户的交互。

下面是一个简单地单页面示例

<div id="app">
<ul>
<li >
<router-link to="/home">首页</router-link>
</li>
<li >
<router-link to="/news">新闻</router-link>
</li>
<li >
<router-link to="/hot">热点</router-link>
</li>
</ul>
<div class="show">
<router-view></router-view>
</div>
<button @click="back()">go back</button>
</div>
<script>
const Home={template:'<h2>首页</h2>'}
const News={template:'<h2>新闻</h2>'}
const Hot={template:'<h2>热点</h2>'}
//Vue.extend(template:'<h1>首页</h1>')
//配置路径
const routes=[
{
path:'/home',component:Home
},
{
path:'/news',component:News
},
{
path:'/hot',component:Hot
}
]//创建router
const router = new VueRouter({
routes
})var vm = new Vue({
el:'#app',
router,
beforeCreate:function(){
this.$router.push('/home').catch(err=>{err})
},
methods:{
back(){
this.$router.go(-1);
}
}
})
</script>

二级路由的配置是在一级路由的基础上,在某一个path下再分离出几个低级的path。

示例

{
//新闻模块下有将新闻进行分类:科技、军事等;其他步骤不影响
path:'/news',component:News,
children:[
/* 二级路由,path分配,前面没有“ / ” */
{
path:'js',
component:{
template:'<p>军事类新闻</p>'
}
},
{
path:'kj',
component:{
template:'<p>科技类新闻</p>'
}
},
{
/* 默认页面可以直接用一个组件,也可以重定向 */
path:'/',
redirect:'js'
// component:{
//   template:'<p>默认值</p>'
// }
}
]
}

路由的进一步详解

axios的使用

使用了常用的两种axios的方法:

axios的get方法使用

<div id="app">
<h1>{{msg}}</h1>
<button @click='getMsg'>Click</button>
</div><script>
/* 创建Vue实例 */
var vm=new Vue({
el:'#app',
data:{
msg:''
},
methods:{getMsg:function(){
/* 方式一
axios.get('./text.txt?name=zhy&age=20').then(res=>{
console.log(res.data)
this.msg=res.data
}).catch(err=>{
console.log(err)
}) */
//方式二
axios.get('./text.txt',{params:{name:'zhy',age:20}}).then(res=>{
this.msg=res.data
}).catch(err=>{
console.log(err)
})
} }
})
</script>

点击事件触发后,就会将text文件中的数据拿到前端显示,post和get方法使用相同。

版权声明:本文为CSDN博主「敲出亿行bug」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wenquan19960602/article/details/106174485

【END】

更多精彩推荐
☞加码 2000 亿新基建还不够,阿里云再放话:今年招 5000 人!
☞议题曝光!百位顶级讲师、20大论坛,总有一个话题吸引你
☞张一鸣是如何练就字节跳动的
☞性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络
☞DevOps 在移动应用程序开发中扮演什么角色?
☞稳定币经济:十大稳定币简史
你点的每个“在看”,我都认真当成了喜欢

VUE 的使用,学会这些就足够了!| 原力计划相关推荐

  1. 查漏补缺!这份 VUE 学习知识总结请注意查收! | 原力计划

    作者 | 新鲜的橘子 责编 | 王晓曼 出品 | CSDN博客 VUE实例的创建 该实例中的内容将和和下面的例子相对应: var vm = new Vue({el:'',data:{msg:" ...

  2. VUE 项目如何快速优化?| 原力计划

    作者 | 靖凡无所畏惧 责编 | 屠敏 出品 | CSDN 博客 前言 相信现在很多人都是用Vue做过了各种项目,但是项目代码做完和上线并不代表这结束,还有上线以后的优化也是很重要的一点,这次的博客就 ...

  3. 20 道必看的 Vue 面试题 | 原力计划

    作者 | 红颜祸水nvn 责编 | 唐小引 出品 | CSDN 原力计划 1. 什么是 MVVM? MVVM 是 Model-View-ViewModel 的缩写,MVVM 是一种设计思想.Model ...

  4. 没有执行此操作所需的足够可用空间。_一文详解 MySQL 高可用之 DRBD | 原力计划...

    作者 | wzy0623责编 | 屠敏出品 | CSDN 博客大多数MySQL高可用解决方案都是基于MySQL自带的各种复制技术.本质上是将一个实例上的数据更新或事务,在其它实例上进行重放,从而完成数 ...

  5. 不来看看这些 VUE 的生命周期钩子函数? | 原力计划

    作者 | huangfuyk 责编 | 王晓曼 出品 | CSDN 博客 VUE的生命周期钩子函数:就是指在一个组件从创建到销毁的过程自动执行的函数,包含组件的变化.可以分为:创建.挂载.更新.销毁四 ...

  6. VUE 响应式原理源码:带你一步精通 VUE | 原力计划

    作者 | 爱编程的小和尚 责编 | 王晓曼 出品 | CSDN博客 学过 VUE 如果不了解响应式的原理,怎么能说自己熟练使用 VUE,要是没有写过一个简易版的 VUE 怎么能说自己精通 VUE,这篇 ...

  7. 哟,2020 年了,用 Vue 做一个自己的小程序吧!| 原力计划

    作者 | End_less_,责编 | 夕颜 来源 | CSDN博客 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 前言 今天,我们来学习一下如何使用vue进行微信 ...

  8. vue 数组 指定位置添加数据_VUE 响应式原理源码:带你一步精通 VUE | 原力计划...

    作者 | 爱编程的小和尚 责编 | 王晓曼 出品 | CSDN博客 学过 VUE 如果不了解响应式的原理,怎么能说自己熟练使用 VUE,要是没有写过一个简易版的 VUE 怎么能说自己精通 VUE,这篇 ...

  9. 学会这些 Python 美图技巧,就等着女朋友夸你吧!| 原力计划

    作者 | ZackSock 前言 Python中有许多用于图像处理的库,像是Pillow,或者是OpenCV.而很多时候感觉学完了这些图像处理模块没有什么用,其实只是你不知道怎么用罢了.今天就给大家带 ...

最新文章

  1. html跳转过度,jq实现锚点跳转过度
  2. python scatter 简书_【挖掘模型】:Python-DBSCAN算法 - 简书
  3. rabbitmq如何保证消息不被重复消费_RabbitMQ保证消息可靠投递与消费的正确使用姿势...
  4. 1.3 编程基础之算术表达式与顺序执行 13 反向输出一个三位数(C++ Scratch)
  5. 软件_crontab任务配置失败原因总结和技巧
  6. 帮一个朋友征集算法代码,大家都来开动你的脑袋发挥你的智慧参与吧
  7. sed 删除行首空格
  8. 拓端tecdat|用R语言实现神经网络预测股票实例
  9. C语言嵌入式系统编程修炼之键盘操作
  10. java对象转json
  11. linux opendir路径_opendir与readdir函数使用示例(获得指定目录下所有文件名
  12. 在 Vue 中使用lodash对事件进行防抖和节流
  13. 四大开源3d游戏引擎探究(前言上)
  14. Oracle创建表空间和用户
  15. html 滑动拼图验证,vue登录滑动拼图验证
  16. VPN 虚拟专用网络隧道
  17. 人工神经网络的训练步骤,神经网络常用训练方法
  18. networkx笔记
  19. RPC(1)HttpClient详细使用 含demo
  20. 学术英语社科Unit8原文翻译

热门文章

  1. ubuntu系统部署python3.6.4
  2. 表达式for loop
  3. python os
  4. linux档案与文件的的压缩与打包
  5. 一步一步写算法(之循环和递归)(转)
  6. ASP.NET通过OLE DB操作Excel
  7. 【深度学习】深度学习门前徘徊——正向传播
  8. java第七章jdbc课后简答题_jsp编程基础第七章习题
  9. HF-NET环境配置与安装
  10. 对Boost.Asio中异步事件循环的理解