vue.js(三)
这里该记到vue的组件了,组件基础篇
1.vue组件的基本书写方式
Vue.component('button-counter', {
data: function () {
return {
count:
}
},
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: , title: 'My journey with Vue',content:'<span style="color:red;">hello</span>' },
{ id: , title: 'Blogging with Vue' ,content:'<span style="color:blue;">hello</span>' },
{ id: , 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: , title: 'My journey with Vue',content:'<span style="color:red;">hello</span>' },
{ id: , title: 'Blogging with Vue' ,content:'<span style="color:blue;">hello</span>' },
{ id: , title: 'Why Vue is so fun' ,content:'<span style="color:black;">hello</span>' },
],
postFontSize:
},
methods: {
enlarge: function () {
this.postFontSize += 0.1;
}
}
})
接下来就是调用这个组件了:
<div id="blog-post-demo">
<div :style="{ fontSize: postFontSize + 'em' }">
<blog-post
v-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: `
<input
v-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">
<input
v-bind:value="value"
v-on:input="$emit('input', $event.target.value)"
>
<button >{{value}}</button>
</div>
`
})
然后,前台渲染如下:
vue.js(三)的更多相关文章
- 一天带你入门到放弃vue.js(三)
自定义指令 在上面学习了自定义组件接下来看一下自定义指令 自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是v ...
- vue.js 三种方式安装--npm安装
Vue.js是一个构建数据驱动的 web 界面的渐进式框架. Vue.js 的目标是通过简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易上手,便于与第三方库或既有项目整合. ...
- 【转】vue.js三种安装方式
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
- vue.js三种安装方式
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
- vue.js 三种方式安装
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
- vue.js 三(数据交互)isomorphic-fetch
至于fetch的介绍,在这里就不多说了,官方和网络上的说明不少 之前使用jquery的Ajax朋友,可以尝试一下使用一下这个新的api 推荐使用isomorphic-fetch,兼容Node.js和浏 ...
- vue.js 三种方式安装(转)
https://blog.csdn.net/m0_37479246/article/details/78836686
- 安装 vue.js和第一个hello world
一.在自己的项目文件中使用npm下载vue npm install vue 二.在文件中引入vue.js 三.第一个hello world 注:scritpt代码必须写在html代码的下面
- 一天带你入门到放弃vue.js(二)
接下来我们继续学习一天带你入门到放弃系列vue.js(二),如有问题请留言讨论! v-if index.html <div id="app"> <p v-if=& ...
- 一天带你入门到放弃vue.js(一)
写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...
随机推荐
- 转载:pyqt线程间通过 信号/槽 通信
转自:http://blog.sina.com.cn/s/blog_613d5bb701016qzv.html 信号(singal)与槽(slot)用于对象相互通信,信号:当某个对象的某个事件发生时, ...
- Oracle行列转换的思考与总结
最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case wh ...
- 总结ASP.NET C#中经常用到的13个JS脚本代码
1.按钮前后台事件 <asp:Button ID="Button1" runat="server" OnClick="Button1_Click ...
- ArcGIS 要素合并
1.选择工具 2.选择输入要素.输出要素.按照什么字段进行合并 3.查看融合结果 4.GP工具-创建GP模型 拖入“融合”工具,设置融合的参数,如下图: 右击左边椭圆,勾选 模型参数 右击右边椭圆,勾 ...
- Spring学习笔记--在SpEL中筛选集合
要用到Spring的util(包括util:list等),xml文件中的beans中需要添加一些有关util的信息: <?xml version="1.0" encoding ...
- checkbox多选框选择判断
全选<input type="checkbox" name="select" id="select" value="chec ...
- poj_3067 树状数组
题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...
- MQTT协议笔记之消息流
前言 前面的笔记已把所有消息类型都过了一遍,这里从消息流的角度尝试解读一下. 网络故障 在任何网络环境下,都会出现一方连接失败,比如离开公司大门那一刻没有了WIFI信号.但持续连接的另一端-服务器可能 ...
- Docker源码分析(一):Docker架构
1 背景 1.1 Docker简介 Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议.目前,Docker可以在容器内 ...
- 图片文字混排的垂直居中、inline-block块元素和行内元素混排的垂直居中问题
图片.文字混排: 不管图片和文字的前后位置,都要给 图片 设置 vertical-algin,而不是谁在前面给谁设置. 此方法兼容IE7+ 和其它主流浏览器.IE7-没有测. inline-block ...