前端学习笔记系列一:2 Vue的单文件组件
(1)非单文件vue组件和单文件vue组件的一般写法
一个完整的vue组件会包括三个部分:一是template模板部分,二是js程序逻辑部分,三是css样式部分。每个组件都有属于自己的模板,js和样式。如果将一个页面比喻成一间房子的话,组件就是房子里的客厅、卧室、厨房、厕所。如果把厨房单独拿出来的话,组件又可以是刀、油烟机...等等。就是说页面是由组件构成的,而组件也可以是组件构成的。这样就可以非常的灵活,耦合性也较低。
先来看看,非单文件vue组件的一般写法,template就是这个组件的html, vue-loader会将template标签下的内容解析出来。
Vue.component('simple-counter', {
template: '<div id="inputBox"><input type="text"></div>',
data () { // 数据
return {
counter: 0
}
},
methods: {// 写点方法
},
created () {// 生命钩子
},
computed: {// 计算属性
}…
})
再来看看,单文件vue组件:
<!—1.template部分,就是这个组件的html,也就是下面部分(vue-loader会将template标签下的内容解析出来)-->
<template>
<div id="inputBox">
<input type="text">
</div>
</template>
<!—2.JS部分>
export default {
data () {
return {
counter: 0
}
},
methods: { // 方法
},
created () { // 生命钩子
},
computed: { // 计算属性
}
}
<!—3.css部分,可以使用scss(CSS扩展语言)只要安装"sass-loader"和"node-sass"这两个npm包就好了,vue-cli已经配好相关参数了。如果想使用less或其它css扩展语言,只要装好各自的编译包就好了。而scoped是让css的作用域只在该文件下。-->
<style lang="scss" scoped>
...样式
</style>
(2)单文件vue组件使用方法
首先定义了一个button组件button.vue:
<template>
<div class="button">
<button @click="onClick">{{text}}</button>
</div>
</template>
<script>
export default {
props: ['text'], // 获取父组件的传值
data () {
return {
}
},
methods: {
onClick () {
console.log('点击了子组件')
// 通过触发自定义事件修改父组件传递的text
this.$emit('event1', '我修改了text')
}
}
}
</script>
<style lang="scss" scoped>
.button {
button {
width: 100px;
}
}
</style>
然后在box.vue组件中调用button.vue:
<template>
<div class="box">
<v-button :text="text" ref="button" @event1="changeText"></v-button>
</div>
</template>
<script>
import Button from './button.vue' // 引入子组件
export default {
components: {
'v-button': Button
},
data () {
return {
text: '按键的name'
}
},
methods: {
changeText (value) { // 自定义事件修改text的值
this.text = value
}
}
}
</script>
这里box.vue里引入了button.vue的组件,并通过components注册,在box.vue使用时只要使用注册时候的名称即可。父组件向子组件传递数据可以通过prop向子组件传值。子组件和父组件的交互其实还有很多,例如子组件要怎么修改父组件传递的值?因为vue的数据是单向的,所以子组件是不允许修改父组件的值的,官方是通过事件的形式修改的,就是父组件在子组件绑定一个自定义事件v-on:event1="event1",然后子组件通过this.$emit('event1')触发修改。可以理解为修改父组件传递的值一定要发生在父组件所在的作用域内。
父组件怎么获取子组件的实例这里父组件可以在子组件定义ref,在通过this.$refs.xxx获取对应的子组件实例。而子组件可通过this.$parent获取父组件的实例。
前端学习笔记系列一:2 Vue的单文件组件的更多相关文章
- vue第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期)
第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期) #课程目标 掌握安装 vue-cli 命令行工具的方法,掌握使用命令行在本地搭建开发环境,使用命令行 ...
- vue的单文件组件
五. 单文件组件 1. .vue文件 .vue文件,称为单文件组件,是Vue.js自定义的一种文件格式,一个.vue文件就是一个单独的组件,在文件内封装了组件相关的代码:html.css.js .vu ...
- vue.js单文件组件中非父子组件的传值
最近在研究vue.js,总体来说还算可以,但是在web开发群里有一些人问在单文件组件开发模式中非父子组件如何传值的问题,今天在这里讲讲,希望对大家有所帮助! 在官网api中的这段讲解很少,也很模糊:官 ...
- Vue之单文件组件的数据传递,axios请求数据及路由router
1.传递数据 例如,我们希望把父组件的数据传递给子组件. 可以通过props属性来进行传递. 传递数据三个步骤: 步骤1:在父组件中,调用子组件的组名处,使用属性值的方式往下传递数据 <Menu ...
- 前端学习笔记系列一:11@vue/cli3.x中实现跨域的问题
由于浏览器的同源访问策略,vue开发时前端服务器通常与后端api服务器并非是相同的服务器,因此需要使用一个代理服务器实现跨域访问.在@vue/cli3.x根目录下创建一个vue.config.js文件 ...
- 前端学习笔记系列一:10整体移动vscode代码块、VSCode 使用 stylus,配置格式化设置、在vue项目中引入bootstrap
1.整体移动vscode代码块 凭借操作的经验我们能够轻松地知道将代码整体往右移只需选中代码按Tab键即可.其实往左移也很简单: 选中之后按下 shift+Tab键 即可. 2.VSCode 使用 s ...
- 前端学习笔记系列一:7 在vscode中根据vue等模板生成代码
目标:希望每次新建.vue文件后,VSCODE能够根据配置,自动生成我们想要的内容. 方法:打开VSCODE编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索 ...
- 前端学习笔记系列一:3 Vue中的nextTick
一.示例 先来一个示例了解下关于Vue中的DOM更新以及nextTick的作用. 模板 <div class="app"> <div ref="msgD ...
- 前端学习笔记系列一:4 vue中@click.native
.native - listen for a native event on the root element of component. 作用:[给组件绑定原生事件] 例子:如果使用router-l ...
随机推荐
- 解决el-input 触发不了键盘事件
<el-input v-model="form.loginName" placeholder="账号" @keyup.enter="doLogi ...
- float元素上-margin的用法
css标准,float元素上的负margin表示把下面的元素向对应方向移动,并且覆盖上一个元素(这里是指html中元素的声明顺序). 标准情况下我们用float 时候是这样的. -margin通俗点说 ...
- MavenProfile简介
在我们平常的java开发中,会经常使用到很多配制文件(xxx.properties,xxx.xml),而当我们在本地开发(dev),测试环境测试(test),线上生产使用(product)时,需要不停 ...
- redhat 7.6 iptables 配置
1.查看iptables默认表(filter) iptables -L -n 2.iptables 默认内链(filter)表三种: INPUT:处理进入防火墙的数据包 FORWARD:源自其他计算机 ...
- 「AHOI2014/JSOI2014」奇怪的计算器
「AHOI2014/JSOI2014」奇怪的计算器 传送门 我拿到这题首先是懵b的,因为感觉没有任何性质... 后来经过同机房dalao的指导发现可以把所有的 \(X\) 放到一起排序,然后我们可以发 ...
- 复盘实战营一期毕业典礼----HHR计划----以太入门课--第一课
你要永远记住,实事求是. 我好像没能力给大家分享什么.分享点我的专业知识吧.我是做推荐+增长的,在一家D轮 DAU快千万的创业公司做增长优化负责人.一路优化,我把人均时长提高了30多分钟(现在人均时长 ...
- linux jar 启动shell 脚本
#!/bin/bash APP_NAME=/data/wwwroot/app.jar #使用说明,用来提示输入参数 usage() { echo "Usage: sh app.sh [sta ...
- kvm的分层控制
第五层 virsh virt-manager(和libvirtd)利用了libvirt-api virsh pool-list --all virsh pool-define xxx/xml会 ...
- 2 Struts2的执行流程&配置文件的加载顺序
执行流程: 访问前段页面,通过url访问action 访问xml中Struts2核心过滤器,并执行一组拦截器(这组拦截器在struts-default.xml中,实现了部分功能) 通过action配置 ...
- MIT宣布人工智能独立设系!
导读 MIT宣布人工智能独立设系!AI与电子工程.计算机科学系将三分天下? MIT 电子工程和计算机科学系(EECS)拆分啦.拆分后分为 3 个学科群(faculty),或者说 3 个系:电子工程(E ...