vue.js(四)
由于组件内容太多又特别关键,我决定在官网教程的基础上,加上自己的理解,针对每个内容详细记录一下
1.注册组件
①全局注册
//首先创建组件
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: '#app1',
data: {
msg:'aaa' ,
msg1:'bbb'
}
})
这样,就能在任意标签内部使用该组件了,但是数据还是根据Vue实例绑定的数据来的
注意:全局注册组件的话,必须先创建组件再创建Vue实例
②局部注册
//创建组件,声明变量
var componentA ={
props: ['value'],
template: `
<div class="custom">
<input
v-bind:value="value"
v-on:input="$emit('input', $event.target.value)"
>
<button >{{value}}</button>
</div>
`
}
//创建Vue实例
new Vue({
el: '#app3',
data: {
msg:'aaa',
msg1:'bbb'
},
components: {
'component-a':componentA
}
})
前台调用:
<div id="app3">
<component-a v-model="msg"></component-a>
</div>
关于组件绑定v-model的用法详解,请参照这篇博客 https://www.cnblogs.com/eco-just/p/9136732.html 的第四点。
2.数据传递之Prop
其实在上篇已经提到过prop了,但是可能说得不太明了,这里采用画图的形式再说明一次,也为了加深自己的理解
我想这张图已经很好地表达了数据传递的过程。
但是,单击改变count值的时候控制台会报这种错:
[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "count" found in ---> <ButtonCounter>
<Root>
因为这里组件的数据来源于外部父组件(parent component)并且单击事件企图更改其值,这也就是文档中提到的:
当然,vue也是给出了解决方案,那就是组件中定义的data属性:
这样的话,单击事件改变变量的值是被允许的,因为此时组件操纵的数据是属于组件自己的了,并且组件复用的时候,组件之间是不会相互影响的。
下面讲组件数据传递的一个特例:双向数据绑定。
我们都知道,vue中v-model实现了双向数据绑定,name在组件中,v-model是这样用的:
值得注意的是,在组件中使用v-model时,v-model绑定的值默认是通过props中的value传递的,他不像之前的单向数据
绑定(v-bind:count="b"时,props通过count传递数据)
可能你也注意到了,上面讲到v-model绑定的值默认是通过value变量传递(这个value可以代表传递过来的任何值),那么
如何自定义绑定的值呢?
这里的vb就相当于之前的value。
另外,由于是双向数据绑定,子组件改变了变量值,会及时反映到父组件中去,如果其他地方也用到了父组件的该变量,那么
将会得到及时更新。
附:props的数据验证(了解就好)
3.自定义事件
我想这张图已经很好地展示了自定义事件调用的过程(之前应该有提到过)。那么怎么通过v-model来调用函数呢
vue.js(四)的更多相关文章
- vue.js 四(指令和自定义指令)
官方的指令说明已经很简单了,这里再写一遍,也是自己加深一下印象 v-text 就是写入单纯的文本,可以忽略这个指令直接双花括号代替 <span v-text="msg"> ...
- Web前端-Vue.js必备框架(四)
Web前端-Vue.js必备框架(四) 计算属性: <div id="aaa"> {{ message.split('').reverse().join('') }} ...
- Vue.js学习使用心得(四)——组件
一.组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界 ...
- Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四)
Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四) 前言 本章主要讲解通过Vue CLI 脚手架构建工具创建一个项目,在学习Vue CLI之前我们需要先了解下webpa ...
- Vue.js 源码分析(二十四) 高级应用 自定义指令详解
除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令. 官网介绍的比较抽象,显得很高大上,我个人对自定义指令的理解是:当自定义指令作用在一些DOM元素或组件上 ...
- vue.js 第四课
(1).插值:在view层上显示model的资料. (2).绑定表达式:在view层上 执行js命令. (3).指令:在view层上 执行写好的功能. (4).缩写:v-bind 绑定 特性 v-on ...
- 从零开始学 Web 之 Vue.js(四)Vue的Ajax请求和跨域
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Vue.js随笔四(方法的声明和使用)
1.首先你需要新建路由,这个就不多说了 2.然后在你的新的.vue里面需要如下所示的添加methods:{方法},然后按钮的里面你会看到v-on:click,这就是点击这个按钮会触发的动作,这个就是触 ...
- vue.js 知识点(四)
看完了vue.js的官方文档,大概对这些知识有了那么一点的了解了,但是很多具体的运用还不太清楚,现在就总结一下,关于其中的一些知识点的运用: v-bind: 动态绑定指令,默认情况下,是给html ...
- Vue.js 源码分析(四) 基础篇 响应式原理 data属性
官网对data属性的介绍如下: 意思就是:data保存着Vue实例里用到的数据,Vue会修改data里的每个属性的访问控制器属性,当访问每个属性时会访问对应的get方法,修改属性时会执行对应的set方 ...
随机推荐
- VNC轻松连接远程Linux桌面(1)
Linux平台安装VNCServer Windows平台使用VNC-Viewer 方法/步骤 在Linux平台安装VNCServer服务端软件包. #yum -y install vnc *v ...
- 关于对afx_msg的解释-----来源百度百科
1AFX前缀 Afx前缀是微软MFC一个小组的名称简写,并没有别的意义. MFC的很多代码,包括全局函数名.宏.头文件名都使用了"Afx". Afx*.h是一组MFC的核心头文件, ...
- oracle中LAG()和LEAD()以及over (PARTITION BY)
LAG()和LEAD()统计函数可以在一次查询中取出同一字段的前N行的数据和后N行的值.这种操作可以使用对相同表的表连接来实现,不过使用LAG和 LEAD有更高的效率.以下整理的LAG()和LEAD( ...
- brew 的 调度工具DBGPRINTF 和 c语言的 printf
在官方的文档中是这样备注DBGPRINTF Prototype void dbgprintf(const char *pszFormat,...); Description This function ...
- ubuntu普通用户无法使用usdo命令
1.切换到root用户下,怎么切换就不用说了吧,不会的自己百度去. 2.添加sudo文件的写权限,命令是: chmod u+w /etc/sudoers 3.编辑sudoers文件 vi /etc/s ...
- MySQL<添加、更新与删除数据>
添加.更新与删除数据 添加数据 为表中所有字段添加数据 INSERT INTO 表名(字段名1,字段名2,……) VALUES(值1,值2,……); insert into 表名 values(值1, ...
- python2.0 s12 day4
python2.0 s12 day404 python s12 day4 TengLan回顾上节内容 05 python s12 day4 迭代器原理及使用 本节大纲介绍: 1.迭代器&生成器 ...
- OpenGL开发环境简介
基于OpenGL标准开发的应用程序运行时需有动态链接库OpenGL32.DLL.Glu32.DLL,这两个文件在安装Windows NT时已自动装载到C:\WINDOWS\SYSTEM32目录下(这里 ...
- 《转》python学习(3)
转自http://www.cnblogs.com/BeginMan/archive/2013/06/03/3114974.html 1.print语句调用str()函数显示,交互式解释器调用repr( ...
- ReactNative For Android 项目实战总结
版权声明:本文由王少鸣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/159 来源:腾云阁 https://www.qclo ...