(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的单文件组件的更多相关文章

  1. vue第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期)

    第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期) #课程目标 掌握安装 vue-cli 命令行工具的方法,掌握使用命令行在本地搭建开发环境,使用命令行 ...

  2. vue的单文件组件

    五. 单文件组件 1. .vue文件 .vue文件,称为单文件组件,是Vue.js自定义的一种文件格式,一个.vue文件就是一个单独的组件,在文件内封装了组件相关的代码:html.css.js .vu ...

  3. vue.js单文件组件中非父子组件的传值

    最近在研究vue.js,总体来说还算可以,但是在web开发群里有一些人问在单文件组件开发模式中非父子组件如何传值的问题,今天在这里讲讲,希望对大家有所帮助! 在官网api中的这段讲解很少,也很模糊:官 ...

  4. Vue之单文件组件的数据传递,axios请求数据及路由router

    1.传递数据 例如,我们希望把父组件的数据传递给子组件. 可以通过props属性来进行传递. 传递数据三个步骤: 步骤1:在父组件中,调用子组件的组名处,使用属性值的方式往下传递数据 <Menu ...

  5. 前端学习笔记系列一:11@vue/cli3.x中实现跨域的问题

    由于浏览器的同源访问策略,vue开发时前端服务器通常与后端api服务器并非是相同的服务器,因此需要使用一个代理服务器实现跨域访问.在@vue/cli3.x根目录下创建一个vue.config.js文件 ...

  6. 前端学习笔记系列一:10整体移动vscode代码块、VSCode 使用 stylus,配置格式化设置、在vue项目中引入bootstrap

    1.整体移动vscode代码块 凭借操作的经验我们能够轻松地知道将代码整体往右移只需选中代码按Tab键即可.其实往左移也很简单: 选中之后按下 shift+Tab键 即可. 2.VSCode 使用 s ...

  7. 前端学习笔记系列一:7 在vscode中根据vue等模板生成代码

    目标:希望每次新建.vue文件后,VSCODE能够根据配置,自动生成我们想要的内容. 方法:打开VSCODE编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索 ...

  8. 前端学习笔记系列一:3 Vue中的nextTick

    一.示例 先来一个示例了解下关于Vue中的DOM更新以及nextTick的作用. 模板 <div class="app"> <div ref="msgD ...

  9. 前端学习笔记系列一:4 vue中@click.native

    .native - listen for a native event on the root element of component. 作用:[给组件绑定原生事件] 例子:如果使用router-l ...

随机推荐

  1. SQL 函数 排序 等基础操作 DDL DML DQL 用法和<> <=>等

    sql基础汇总 --根据函数别名排序 --排序规则,默认是升序 sleect LENGTH(NAME) nameLength from user ORDER BY nameLength DESC -- ...

  2. SprintBoot学习(二)

    Spring Boot的入口类 1.名为xxxApplication的就是入口类,在main方法中使用SpringApplication.run(SpringBootTestApplication.c ...

  3. Cisco AP-如何识别思科胖瘦AP

    思科的胖瘦AP识别的方式不止一种,这里简单的总结一些我了解到的方式: 1.根据思科AP的型号 这个和思科不同时期的产品有关系,老一点的和新一些的AP命名上存在差别,这里简单举例: 类型1:AIR-LA ...

  4. query_phase_execution_exception

    ES报错信息: { "error": { "root_cause": [ { "type": "query_phase_execu ...

  5. Linux下安装 boost 库

    1. 先去官网下载压缩包: https://www.boost.org/ 2. 解压 tar -zvxf boost_1_70_0.tar.gz 2. cd 进入根目录,然后执行: ./bootstr ...

  6. 【STM32H7教程】第54章 STM32H7的LTDC应用之LCD电阻触摸和电容触摸

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第54章       STM32H7的LTDC应用之LCD电阻 ...

  7. php基础 php 全局变量

    $_GET ----->get传送方式 $_POST ----->post传送方式 $_REQUEST ----->可以接收到get和post两种方式的值 $GLOBALS ---- ...

  8. python3.6.5修改print的颜色

    开头部分:\033[显示方式;前景色;背景色m +想要输出的内容:\033[0m      注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,具体参数效果见下文,可以只写其中的某一个:参数 ...

  9. 解Bug之路-记一次调用外网服务概率性失败问题的排查

    前言 和外部联调一直是令人困扰的问题,尤其是一些基础环境配置导致的问题.笔者在一次偶然情况下解决了一个调用外网服务概率性失败的问题.在此将排查过程发出来,希望读者遇到此问题的时候,能够知道如何入手. ...

  10. PAT T1011 Cut Rectangles

    大模拟题,按要求建立多边形,先定位斜边的位置,再分类讨论~ #include<bits/stdc++.h> using namespace std; ; struct node { dou ...