1、prop是一个对象而不是字符串数组时,它包含验证要求。
props: {
// 基础类型检测 (`null` 意思是任何类型都可以)
propA: Number,
// 多种类型
propB: [String, Number],
// 必传且是字符串
propC: {
type: String,
required: true
},
// 数字,有默认值
propD: {
type: Number,
default: 100
},
// 数组/对象的默认值应当由一个工厂函数返回
propE: {
type: Object,
default: function () {
return { message: 'hello' }
}
},
// 自定义验证函数
propF: {
validator: function (value) {
return value > 10
}
}
}

2、父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,就需要使用自定义事件!
$on(eventName) 监听事件
$emit(eventName) 触发事件

3、使用 Vue.component 定义全局组件的时候,组件名称使用了 驼峰命名(如myLogin),则在引用组件的时候,需要把 大写的驼峰改为小写的字母,同时在两个单词之前,使用 - 链接(<my-login></my-login>);如果不使用驼峰,则直接拿名称来使用即可;

注意:不论是哪种方式创建出来的组件,组件的 template 属性指向的模板内容,必须有且只能有唯一的一个根元素,否则会报错。

4、用于登陆和注册两个组件之间的切换问题:使用flag即可。
注:由于flag的值只有true和false,所以只能用于两个组件间 的切换,当大于两个组件的切换就不行了。具体操作如下:
<div id="box">
<!-- 给a注册点击事件,切换flag状态 -->
<a href="javascript:;" @click.prevent="flag=true">登录</a>
<a href="javascript:;" @click.prevent="flag=false">注册</a>
<!-- 使用v-if v-else切换组件 -->
<login v-if="flag">
</login>
<register v-else="flag">
</register>
</div>

<script>
Vue.component('login', {
template: '<h3>登录组件</h3>'
});
Vue.component('register', {
template: '<h3>注册组件</h3>'
});

var vm = new Vue({
el: "#box",
data: {
flag: true
},
methods: {}
});
</script>

如要切换3个及以上的组件则需要使用 :is 属性来执行。
如:<component :is="componentId"></component>

具体实施:
<div id="box">
<!-- 给a注册点击事件,切换flag状态 -->
<a href="javascript:;" @click.prevent="componentId='login'">登录</a>
<a href="javascript:;" @click.prevent="componentId='register'">注册</a>
<component :is="componentId"></component>
</div>

<script>
Vue.component('login', {
template: '<h3>登录组件</h3>'
});
Vue.component('register', {
template: '<h3>注册组件</h3>'
});

var vm = new Vue({
el: "#box",
data: {
componentId: 'login' // 默认显示登录
},
methods: {}
});
</script>

5、父组件引用子组件,通过绑定属性(v-bind:)的形式,把需要传递给子组件的数据,以属性绑定的形式,传递到子组件内部,供子组件使用。

<div id="box">
<mycom v-bind:parentmsg="msg"></mycom>
</div>

<template id="temp">
<h3>子组件 --- 父组件:{{parentmsg}}</h3>
</template>

<script>
var vm = new Vue({
el: "#box",
data: {
msg: '父组件的msg'
},
methods: {},
components: {
mycom: {
template: "#temp",
// 对传递给子组件的数据进行声明,子组件才能使用
props: ['parentmsg']
}
}
});
</script>

注意:父组件绑定的属性名称不能有大写字母,否则不会显示,并且在命令行会有提示:

6、组件data数据和props数据的区别:
data数据是子组件私有的,可读可写;
props数据是父组件传递给子组件的,只能读,不能写。

案例:发表评论功能
父组件为评论列表,子组件为ID,评论者,内容和按钮的集合,在输入ID,评论者等内容,然后点击添加的时候,需要首先获取子组件的list列表,然后再添加新的列表项到列表中。
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script rel="script" src="js/jquery.min.js"></script>
<script rel="script" src="js/vue.min.js"></script>
</head>
<body>
<div id="box">
<mycom :plist="list"></mycom>
<!--父组件列表-->
<ul>
<li v-for="item in list" :key="item.id">
ID:{{item.id}} --- 内容:{{item.content}} --- 评论人:{{item.user}}
</li>
</ul>
</div>

<!--子组件:内容需要添加到父组件的列表中-->
<template id="tmp1">
<div>
<label>
ID:
<input type="text" v-model="id">
</label>
<br>
<label>
评论者:
<input type="text" v-model="user">
</label>
<br>
<label>
内容:
<textarea v-model="content"></textarea>
</label>
<br>
<!-- 把父组件的数据作为子组件的函数参数传入 -->
<input type="button" value="添加评论" @click="addContent(plist)">
</div>
</template>
<script>
var vm = new Vue({
el: "#box",
data: {
list: [{
id: Date.now(),
user: 'user1',
content: 'what'
}, {
id: Date.now(),
user: 'user2',
content: 'are'
}]
},
methods: {},
components: {
mycom: {
template: '#tmp1',
data: function () {
return {
id: '',
user: '',
content: '',
}
},
methods: {
addContent(plist) {

//plist.unshift({ //可向数组的开头添加一个或更多元素,并返回新的长度。

plist.push({ //将新项添加到数组末尾,请使用 push() 方法。

id: this.id,
user: this.user,
content: this.content
});
}
},
props: ['plist']
}
}
});
</script>
</body>
</html>
把添加ID,评论人,内容作为子组件,把列表作为父组件,然后把添加的数据放到父组件列表上,由于要获取到父组件列表的数据,所以必然涉及到父组件向子组件传值的过程。这里还通过子组件方法参数来保存父组件的数据到子组件的数据中。

转载于:https://www.cnblogs.com/LindaBlog/p/9700812.html

Vue注意事项及用得较多的属性归纳相关推荐

  1. 除了数据属性,Vue 实例还提供了一些有用的实例属性与方法。它们都有前缀 $,以便与用户定义的属性区分开来。

    实例 <div id="vue_det"> <h1>site : {{site}}</h1> <h1>url : {{url}}&l ...

  2. Vue的常用指令(v-html {{}}文本插值,v-bind绑定属性,v-if条件渲染,v-for列表渲染,v-on @ 事件绑定,v-model表单绑定)

    Vue的常用指令(文本插值,绑定属性,条件渲染,列表渲染,事件绑定,表单绑定) Vue 的介绍 Vue 是一套构建用户界面的渐进式前端框架. 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已 ...

  3. [vue] vue变量名如果以_、$开头的属性会发生什么问题?怎么访问到它们的值?

    [vue] vue变量名如果以_.$开头的属性会发生什么问题?怎么访问到它们的值? 报错 变量未定义 以 _ 或 $ 开头的属性 不会 被 Vue 实例代理,因为它们可能和 Vue 内置的属性.API ...

  4. Vue第一部分(3):事件绑定与标签属性赋值

    1.事件绑定:v-on指令  基本使用 在Vue中通过 v-on 指令给页面元素绑定事件. 语法: v-on:事件名="js代码片段或函数" //事件名=事件属性-on 比如:cl ...

  5. Vue:实例演示,v-if,v-for,v-model,v-bind,v-on,计算属性和侦听器属性

    Vue:实例演示,v-if,v-for,v-model,v-bind,v-on,计算属性和侦听器属性 一.实例演示,v-if,v-for,v-model,v-bind,v-on 方法 含义 v-bin ...

  6. vue 在IE11中报错 “对象不支持“assign”属性或方法”

    一.ie11打开vue2.0项目空白,控制台报错 vuex requires a Promise polyfill in this browser Promise为ES6语法,有的浏览器不支持ES6, ...

  7. vue渲染时数据对象里面的子对象的属性报错undefined,但页面正常渲染

    vue渲染时数据对象里面的子对象的属性报错undefined,但页面正常渲染. 报如图所示错误 页面中报错的位置 原因是在data中申明了空对象,页面在渲染的时候,数据还没获取到的时候,首先渲染的是初 ...

  8. Meteor中集成Vue注意事项

    meteor_vue_jest 单元测试案例,采用mock拦截函数执行,模拟返回数据 源码 https://gitee.com/618859/meteor_vue_test_jest 更多jest知识 ...

  9. Vue 注意事项,内含详细讲解

    前言 转自[https://mp.weixin.qq.com/s?__biz=MjM5MDA2MTI1MA==&mid=2649091937&idx=1&sn=1d08ebe7 ...

最新文章

  1. SAP MM VL32N和MIGO对内向交货单做收货,都会更新其‘总体货物移动状态‘
  2. 求1~n的全排列组合
  3. 这张父子照曾火遍全国,如今他们的故事比照片更动人
  4. 深度学习的实用层面 —— 1.5 为什么正则化可以减少过拟合
  5. CSS设置元素水平居中、垂直居中方式汇总
  6. HTTP协议详细总结
  7. 计算机程序设计vb怎么保存,VB编程:读取文本文件和保存文本文件的方法
  8. EF批量添加数据BulkInsert
  9. 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第四章 2020-12-29 完整工程
  10. 【虚幻引擎4系列教程】第1章:虚幻引擎4的安装指导
  11. Win7批量离线更新补丁方法
  12. 手机硬件电路英文缩写
  13. 区块链隐私保护(一): 交易层的隐私保护机制
  14. IIS express 配置和500.22错误解决详解
  15. Springcould学习总结
  16. 10.1假期一半总结
  17. 升级了鸿蒙资料还在吗,手机升级更新鸿蒙系统会清空数据吗?华为鸿蒙升级需要备份吗...
  18. brew 一直等待_等待幸福作文小学生5篇2020年
  19. 整车电源的几种模式:OFF/ACC/RUN/CRANK
  20. 卡波姆对皮肤的作用副作用_化妆品中卡波姆的功效与作用 是否对皮肤有害

热门文章

  1. AndroidStudio更新时报错:Connection Error,Temp directory inside installation
  2. IDEA中新建SpringBoot项目时提示:Artifact contains illegal characters
  3. Navicat通过存储过程批量插入mysql数据
  4. 数据结构-队列详解(类C语言版)
  5. 售前笔记(四)——呈现沟通(PPT交流)
  6. 需求文档可以不签字吗? 之一
  7. 过程改进建设中的常见奖励措施
  8. Tomcat服务器目录结构
  9. nanopi基础配置
  10. 2021 跨境电商发展关键词:品牌化、独立站、多渠道精细化