vue开发(二)单文件组件开发
来源:互联网 发布:淘宝达人怎么申请直播 编辑:程序博客网 时间:2024/05/16 05:18
基础
- vue-loader
一个单独的组件是一个.vue文件,由于.vue文件是自定义的,浏览器不认识,所以需要对该文件进行解析,所以在webpack构建中,需要安装vue-loader
var myCom = Vue.extend({ template: '<div>这是我的组件</div>'})
- 文件结构
- template
都是html代码,里面可以含有变量
- style
scoped 表明这里写的css 样式只适用于该组件,可以限定样式的作用域 - script
都是js代码,定义了这个组建中需要的数据和操作
export default 后面的对象即为Vue对象,定义组件需要的数据,一级操作数据的方法等
- template
组件通信
- 父->子组件通信
3个地方需要对应:
- 父组件:调用子组件时,标签的参数mes-father
- 子组件:内template中数据展示mesFather
- script的export default对象,属性props:[‘mesFather’]
- >在A组件中通过import引入B组件,那么A组件就是父组件,B组件就是子组件
- >在我们这个vue-cli 项目中,src 文件夹下有一个App.vue 文件,它的script标签中,import Hello from ‘./components/Hello’,那么 App.vue 就是父组件,components 文件夹下的Hello.vue 就是子组件。父组件通过props 向子组件传递数据,子组件通过自定义事件向父组件传递数据。
- >父组件向子组件传值:主要是通过元素的属性进行的. 在App.vue 的template中,有一个 , 这就是我们引入的子组件. 给其添加属性如 mes-father=”message from father”; 父组件将数据传递进去,子组件需要接收才能使用.
// App.vue<template> <div id="app"> <img src="./assets/logo.png"> <hello mes-father="message from father"></hello> </div></template>
- >在export default的对象中,添加一个字段props,他是一个数组,专门用来接收父组件传递过来的数据. props: [“mesFather”], 这里定义了mesFather 字符串, 和父组件中定义的元素的属性一一对应
// Hello.vue组件<template> <div class="hello"> <p>{{mesFather}}</p> </div></template><script>export default { props:['mesFather']}</script>
子->父组件通信
- 子组件:某个标签内添加事件引用@keypress.enter=”enter”,enter事件需要在methods中定义,执行方法使用$emit,两个参数,一个是父组件接收的函数名称,另一个是传入父组件的参数;
同时添加v-model数据绑定v-model=”inputValue”
v-model中的数据需要在data中return - 父组件在引用子组件的标签内,引用事件(应该与子组件传给父组件的函数名一致),等于父组件methods中定义的事件名
另外,父组件的data中应该定义一个参数用来存储方法执行后的结果,从而与视图层呼应
- >子组件通过自定义事件向父组件传递数据。
- >例如,我们在Hello.vue ,写入一个input, 接收用户输入,我们想把用户输入的数据传给父组件。这时,input 需要先绑定一个keypress 事件,获取用户的输入,同时还要发射自定义事件,如valueUp, 父组件只要监听这个自定义事件,就可以知道子组件要向他传递数据了。子组件在发射自定义事件时,还可以携带参数,父组件在监听该事件时,还可以接受参数,参数,就是要传递的数据。
- >在 Hello.vue template中,添加一个input输入框,给它一个v-model 获取用户的输入,再添加keypress的事件,用于发射事件,传输数据。script 中添加data,定义变量来获取用户的输入,添加methods 来处理keypress事件的处理函数enter, 整个Hello.vue 文件如下
- 子组件:某个标签内添加事件引用@keypress.enter=”enter”,enter事件需要在methods中定义,执行方法使用$emit,两个参数,一个是父组件接收的函数名称,另一个是传入父组件的参数;
<template> <div class="hello"> <!-- 添加一个input输入框 添加keypress事件--> <input type="text" v-model="inputValue" @keypress.enter="enter"> <p>{{mesFather}}</p> </div></template><script>export default { props:['mesFather'], // 添加data, 用户输入绑定到inputValue变量,从而获取用户输入 data: function () { return { inputValue: '' } }, methods: { enter () { this.$emit("valueUp", this.inputValue) //子组件发射自定义事件valueUp, 并携带要传递给父组件的值, // 如果要传递给父组件很多值,这些值要作为参数依次列出 如 this.$emit('valueUp', this.inputValue, this.mesFather); } }}</script>
- >在App.vue 中, template中hello 组件绑定一个自定义事件,@valueUp =“receive”, 用于监听子组件发射的事件,再写一个 p 元素,用于展示子组件传递过来的数据,
子组件传递过来的数据 {{ childMes }}
相应地,在scrpit中,data 中,定义一个变量childMes, 并在 methods 中,定义一个事件处理函数reciever。整个App.vue修改如下:
<template> <div id="app"> <img src="./assets/logo.png"> <!-- 添加自定义事件valueUp --> <hello mes-father="message from father" @valueUp="recieve"></hello> <!-- p元素,用于展示子组件传递过来的数据 --> <p>子组件传递过来的数据 {{childMes}}</p> </div></template><script>import Hello from './components/Hello'export default { name: 'app', components: { Hello }, // 添加data data: function () { return { childMes:'' } }, // 添加methods,自定义事件valueUp的事件处理函数recieve methods: { recieve: function(mes) { // recieve 事件需要设置参数,这些参数就是子组件传递过来的数据,因此,参数的个数,也要和子元素传递过来的一致。 this.childMes = mes; } }}</script>
阅读全文
0 0
- vue开发(二)单文件组件开发
- vue单文件组件
- .net core + vue开发单页应用(二)
- vue 单文件组件 *.vue 组件
- 单文件组件.vue 文件
- vue开发(一)组件化开发
- vue.js 单文件组件 .vue文件
- 关于单文件组件.vue
- 开发Vue树形组件
- Vue组件开发分享
- 开发 Vue 组件
- vue组件开发
- Vue组件开发实践
- vue.js组件开发
- Vue组件开发实践
- vue.js原生组件化开发(二)——父子组件
- 开始 Vue 之旅--开发项目(二)子组件与父组件的事
- vue组件(二)
- 【Kotlin从入门到深坑】之类的属性和字段
- vue开发(一)组件化开发
- 网上商城项目总结
- Oracle数据库之如何安装及使用
- Leetcode之Linked List Cycle 问题
- vue开发(二)单文件组件开发
- linux vi编辑常用技巧
- Anaconda使用教程-Windows
- unity的LOD组件
- nodejs简易爬虫
- vue开发(三)vue-router
- 关于netty源码的分析
- JS实现继承的几种方式
- html.html