vue.js(三)

这里该记到vue的组件了,组件基础篇

1.vue组件的基本书写方式

Vue.component('button-counter', {data: function () {return {count: 0}},template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
})

上面定义了一个名为button-counter的组件,其内容就是最下面红字所示的那样,下面就是使用这个组件了:

//创建Vue实例
new Vue({ el: '#components-demo' })//在Vue实例中用这个组件
<div id="components-demo"><button-counter></button-counter>
</div>

你可能看到了,定义这个组件的时候,数据data是通过函数的形式返回的,一个组件的 data 选项必须是一个函数,因此

每个实例可以维护一份被返回对象的独立的拷贝。所以当我们像下面这样复用组件的时候,他们的count值是互不干扰的。

<div id="components-demo"><button-counter></button-counter><button-counter></button-counter><button-counter></button-counter>
</div>

注意:像上面那样通过Vue.component注册一个组件是全局注册,所谓全局注册,就是说这样的组件可以应用在任意的Vue

实例中。

2.数据传递之Prop

//定义一个名为“blog-post”的组件
Vue.component('blog-post', {props: ['title','content'],template: "<div ><h3>{{ title }}</h3><div v-html='content'></div></div>"})
//实例化一个Vue对象new Vue({el: '#blog-post-demo',data: {posts: [{ id: 1, title: 'My journey with Vue',content:'<span style="color:red;">hello</span>' },{ id: 2, title: 'Blogging with Vue' ,content:'<span style="color:blue;">hello</span>' },{ id: 3, title: 'Why Vue is so fun' ,content:'<span style="color:black;">hello</span>' },]}})

那么,接下来,我们就可以去使用这个组件了,因为要使用实例化Vue对象的数据,那么我们就必须将这个组件放在数据

生效的Vue组件绑定的DOM下了,上面显然是要放在ID为blog-post-demo的标签下,so:

<div id="blog-post-demo"><blog-post v-for="post in posts" v-bind:key="post.id" v-bind:title="post.title" v-bind:content = "post.content"></blog-post>
</div>

我们看到,通过prop属性中申明的变量名,我们向该组件绑定了两个变量。这里需要区分的是v-bind:title,现在举个栗子:

//改了下组件模板,其余不变
template: "<div ><h3 v-bind:title='title'>標題</h3><div v-html='content'></div></div>"

在使用组件的时候,v-bind:title="post.title",这里的红字title是为title变量赋值;

对于模板,第一种模板中{{ title }}这是调用变量title,第二种模板中v-bind:title='title',前面的title是title属性,后面的title是为title

属性赋值!所以,你看的三个红字title都是变量,不要混淆。

注意:我想你可能也注意到了红色背景的div标签,这是因为在Vue中每个组件必须只有一个根元素!所以,我们选择用一个父

标签将实际内容包起来来解决这个问题。

3.为组件绑定自定义事件

//定义组件,数据传递只通过post变量Vue.component('blog-post', {props: ['post'],template: `<div class="blog-post"><h3>{{ post.title }}</h3><button v-on:click="$emit('enlarge-text')">Enlarge text</button><div v-html="post.content"></div></div>`})
//实例化一个Vue对象,并提供数据和方法new Vue({el: '#blog-post-demo',data: {posts: [{ id: 1, title: 'My journey with Vue',content:'<span style="color:red;">hello</span>' },{ id: 2, title: 'Blogging with Vue' ,content:'<span style="color:blue;">hello</span>' },{ id: 3, title: 'Why Vue is so fun' ,content:'<span style="color:black;">hello</span>' },],postFontSize: 1},methods: {enlarge: function () {this.postFontSize += 0.1;}}})

接下来就是调用这个组件了:

  <div id="blog-post-demo"><div :style="{ fontSize: postFontSize + 'em' }"><blog-postv-for="post in posts"v-bind:key="post.id"v-bind:post="post"v-on:enlarge-text="enlarge"></blog-post></div></div>

蓝底是向这个组件内部传递数据变量(这里只能传递唯一的变量post,这在props中已经定义)和方法;

至于方法,我是这么记忆的,在组件标签属性上声明为这个组件绑定enlarge-text事件(自定义事件),这个事件调用

Vue实例的enlarge方法,然后模板内部定义,当button按钮单击的时候就会触发enlarge-text事件,于是,两两嵌套实

现了,当button按钮单击的时候触发Vue实例的method(enlarge方法)。

4.组件绑定v-model

之前我们都知道,v-model的写法,像这样:

<input v-model="searchText">
<p>{searchText}<p>

如此这般,input输入的值就会传给变量searchText,并且p标签得到响应,及时地显示出来,那么在组件当中怎么来用呢?

官网教程这么写的:

//定义组件
Vue.component('custom-input', {props: ['value'],template: `<inputv-bind:value="value"v-on:input="$emit('input', $event.target.value)">`
})//声明vue实例
new Vue({el: '#app1',data: {msg:'aaa' }})//引用模板
<div id="app1"><custom-input v-model="msg" ></custom-input>{{msg}}
</div>

刚看的时候很是不解,因为v-model可以直接读取vue实例中的变量值,那么在组件声明中,为什么还要用props,以及在

模板中使用v-bind:value=‘value’?用意是什么,因为教程上没有作特别说明,所以在自己的几番探索之后,得出结论:

①上面红字的value是固定写法,用来传递vue实例中的变量,并根据引用组件时候定义的v-model值来动态改变模板

标签初始化时候的value属性值(亲测,换成其他字段初始化的时候模板标签的value属性值无效)

②v-model不仅仅可以起到绑定vue实例中变量的效果,还可以将绑定的变量通过props传到组件内部的模板上,然后在

模板内部使用v-model传来的数据。

针对第二点,我对模板作了修改,其他照旧:

Vue.component('custom-input', {props: ['value'],template: `<div class="custom"><inputv-bind:value="value"v-on:input="$emit('input', $event.target.value)"><button >{{value}}</button></div>`})

然后,前台渲染如下:

 

转载于:https://www.cnblogs.com/eco-just/p/9136732.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nuxt中如何使用Vuex-Store异步获取数据

Nuxt是一个基于Vue.js的通用型框架&#xff0c;它集成了使用Vue开发的绝大数组件/框架。 长话短说如何在Vuex-store中获取异步数据呢&#xff1f; 在Nuxt中由于集合了Vuex还有其他的一些配置&#xff0c;大大的方便了我们使用Vuex&#xff1b;在Nuxt官方文档中写到&#xff1a;…

Struts2面试问答

Struts2是用Java开发Web应用程序的著名框架之一。 最近&#xff0c;我写了很多Struts2教程 &#xff0c;在这篇文章中&#xff0c;我列出了一些重要的Struts2面试问题以及答案&#xff0c;以帮助您进行面试。 什么是Struts2&#xff1f; Struts1和Struts2之间有什么区别&…

基于canvas的骨骼动画

最近学习到了一种关于canvas的骨骼动画&#xff0c;听这个名字就知道他和canvas之前的动画不同&#xff0c;不知道你有没有兴趣了解一下呢&#xff1f;关于骨骼动画最初是无意间在腾讯团队上看到的&#xff0c;但是由于他官网的教程是在是少之又少&#xff0c;也就仅有一个小de…

Python APSchedule安装使用与源码分析

我们的项目中用apschedule作为核心定时调度模块。所以对apschedule进行了一些调查和源码级的分析。 1、为什么选择apschedule&#xff1f; 听信了一句话&#xff0c;apschedule之于python就像是quartz之于java。实际用起来还是不错的。 2、安装 # pip安装方式 $ pip install ap…

NetBeans 7.4的本机Java打包

成为“ NetBeans 74 NewAndNoteworthy ”页面的NetBeans 7.4的新功能之一是“本机打包 ”&#xff0c;在该页面上被描述为“ JavaSE项目现在支持使用JavaFX提供的本机打包技术来创建本机包。 ” 我将使用一个非常简单的示例来演示NetBeans 7.4中的本机打包功能。 下一个代码清…

基于Vue开发一个日历组件

最近在做一个类似课程表的需求&#xff0c;需要自制一个日历来支持功能及展现&#xff0c;就顺便研究一下应该怎么开发日历组件。 更新 2.23修复了2026年2月份会渲染多一行的bug&#xff0c;谢谢深蓝一人童鞋提出的bug&#xff0c;解决方案是给二月份的日历做特殊处理&#xf…

php 打开word乱码怎么办,如何解决php word 乱码问题

php word乱码的解决办法&#xff1a;首先打开“/Writer/Word2007/Base.php”文件&#xff1b;然后添加“$objWriter->writeAttribute(‘w:eastAsia’, $font)”内容&#xff1b;最后保存修改即可。PHPword解决中文乱码一、增加东亚字体支持打开并编辑路径/Writer/Word2007/B…

Java开发人员访谈的MindMap

多年来&#xff0c;我曾在许多Java开发人员访谈中担任小组成员。 之前&#xff0c;我曾写过一篇标题为“成功进行软件工程师技术面试的7大技巧”的文章&#xff0c;其中涵盖了很少的一般准则。 在本文中&#xff0c;我将分享一个思维导图&#xff0c;其中包含Java开发人员访谈中…

送给大家一个好看的简历神器

很多人看到里边有好看的东西就习惯性的点进来看看&#xff0c;还一边点一边想 —— 好看的简历我见多了&#xff0c;你这个又能好看到哪里去。我想差不多可以&#xff1a; 哪里吧因为最近有在准备简历&#xff0c;就习惯性的找一找有没有现成的简历模板。结果全是付费的&#x…

PHP简单实现单点登录功能示例

1.准备两个虚拟域名 127.0.0.1 www.openpoor.com127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 123456789101112131415161718<?phpsession_start();?><!DOCTYPE html><html><head><meta charset"UTF-8"/&…

JUNG 计算图属性,中心度,偏心率,直径,半径

本文介绍利用Java的第三方API JUNG 计算图中&#xff1a; closeness centrality&#xff1b;// 图中某节点的 接近中心性/亲密中心性 betweenness centrality&#xff1b;// 图中某节点的 中介中心性/介数中心性 distance; // 图中两节点的最短距离 eccentricity; // 图中某节…

Java VM –提防YoungGen空间

您可能从我们以前的面向性能的文章中看到&#xff0c;健康的JVM是实现最佳应用程序性能和稳定性的最重要目标之一。 这样的健康评估通常仅关注主要收集的频率&#xff08;避免&#xff09;或检测内存泄漏的存在。 年轻一代空间或短寿命物体的大小和足迹如何&#xff1f; 本文…

小程序绘图工具painter-json文件绘制保存分享图-可点击任意元素触发函数

Painter是由酷家乐移动前端团队打造的一款小程序绘图组件。 原项目地址&#xff1a;https://github.com/Kujiale-Mobile/Painter 新版地址&#xff1a;https://github.com/shesw/Painter 这款交互版原来是为了针对业务中的新需求而由我自己开发的&#xff0c;后来需求改动&a…

4 张动图解释为什么(什么时候)使用 Redux

dev-reading/fe 是一个阅读、导读、速读的 repo&#xff0c;不要依赖于 dev-reading/fe 学习知识。本 repo 只是一个快速了解文章内容的工具&#xff0c;并不提供全文解读和翻译。你可以通过本平台快速了解文章里面的内容&#xff0c;找到感兴趣的文章&#xff0c;然后去阅读全…

您正在使用什么垃圾收集器?

我们的研究实验室正全速前进。 随着最近的资金注入 &#xff0c;我们只能保证我们不断创新的步伐只会加快。 我们进行的部分研究与GC优化有关。 在处理这个有趣领域中的问题时&#xff0c;我们认为可以分享一些有关GC算法使用的见解。 为此&#xff0c;我们对使用特定GC算法的…

前端布局推进剂 - 间距规范化

我是一个爱折腾设计的前端&#xff0c;一直都在标榜自己的页面还原是多么的牛 X 。怎么做到页面还原&#xff1f;我有一个最笨但是有效的方法&#xff0c;就是把设计稿直接存成图片&#xff0c;作为背景图然后临摹着设计稿进行开发。我觉得自己太有才了。像素级还原有没有&…

echarts折线图相关

optionJKDLine {  title: {text: 告警数量趋势图,textStyle:{  //标题样式fontStyle:normal,fontFamily:sans-serif,fontSize:12    }},tooltip: {trigger: axis},legend: {  //图例,默认显示},grid: {  //图表距离left: -3%,right: 5%,bottom: 3%,top:20%,contai…

一个关于fixed抖动的小bug

前言 大家都知道position: fixed用于生成绝对定位的元素&#xff0c;相对于浏览器窗口进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 突然发现自己之前写的网页有个小bug&#xff1a;在购买页面的…

腾讯Node.js基础设施TSW正式开源

经过六年的迭代与沉淀&#xff0c;腾讯Tencent Server Web (以下简称TSW)这一公司级运维组件于今日正式开源。TSW是面向WEB前端开发者&#xff0c;以提升问题定位效率为初衷&#xff0c;提供云抓包、全息日志和异常发现的Node.js基础设施。TSW每天为百亿次请求提供稳定服务&…

ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.2,使用注释的方式来生成)...

摘要&#xff1a; Android中对SQLite数据库使用&#xff0c;是一件非常频繁的事情。现今&#xff0c;也有非常多的SQLite处理的开源框架&#xff0c;其中最著名的greenDao&#xff0c;它以占用资源少&#xff0c;处理效率高等特点&#xff0c;成为优秀的ORM框架之一。那么对于g…