Vue2.5开发去哪儿网App 第四章笔记 上
一 . 组件细节知识点
1. 解决组件在h5中编码规范
例如 : table , ul , ol 等等
<table>
<tbody>
<row></row>
<row></row>
<row></row>
</tbody>
</table>
Vue.component('row',{
template:'<tr><td>this is a row</td></tr>'
});
使用 is 属性解决
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件使用细节点</title>
<script src="../../vue.js"></script> </head>
<body>
<div id="app">
<!--1.vue提供的is属性-->
<table>
<tbody>
<tr is="row"></tr>
<tr is="row"></tr>
<tr is="row"></tr>
</tbody>
</table>
</div>
<script>
Vue.component('row',{
template:'<tr><td>this is a row</td></tr>'
});
var vm = new Vue({
el:"#app"
})
</script>
</body>
</html>
2. 非根组件定义data
在子组件里面定义data时,data必须是一个函数,不能是一个对象。这是为了保证每个子组件都有独立的data数据
写法:
data:function(){
return {
content:'this is a content'
}
}
3.代码里面操作dom
HandleClick:function () {
//可根据ref 获取dom节点
var hello = this.$refs.hello.innerHTML;
alert('获取到的值是:'+hello)
}
4. counter 求和 了解ref的使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件使用细节点</title>
<script src="../../vue.js"></script> </head>
<body>
<div id="app">
<table>
<tbody>
<tr is="row"></tr>
<tr is="row"></tr>
<tr is="row"></tr>
</tbody>
</table>
<div @click="HandleClick" ref="hello">获取hello</div> <!--#计数器-->
<counter @change="GetTotal" ref="one"></counter>
<counter @change="GetTotal" ref="two"></counter>
<!--#连个counter求和-->
<!--发布订阅模式--> <div>总数是:{{total}}</div>
</div>
<script>
Vue.component('row',{
data:function(){
return {
content:'this is a content'
}
},
template:'<tr><td>{{content}}</td></tr>'
}); // #计数器
var counter = Vue.extend({
template:'<div><button @click="CounterClick">click me</button>{{number}}</div>',
data:function () {
return {
number:0
}
},
methods:{
CounterClick:function () {
this.number++;
//向父组件传值
this.$emit('change')
}, }
})
Vue.component('counter',counter); var vm = new Vue({
el:"#app",
data:{
total:0
},
methods:{
HandleClick:function () {
//可根据ref 获取dom节点
var hello = this.$refs.hello.innerHTML;
alert('获取到的值是:'+hello)
},
GetTotal:function () {
var refs = this.$refs;
this.total = refs.one.number + refs.two.number
}
}
})
</script>
</body>
</html>
二 . 父子组件传值
父组件向子组件传值都是通过属性的形式传递的:
<div id="app">
<counter :count="9"></counter>
<counter :count="1"></counter>
</div>
<script>
var counter = {
props:['count'],
template:'<div>{{count}}</div>'
} var vm = new Vue({
el:"#app",
components:{
counter:counter
}
})
counter 求和:
vue 会对子组件 直接对父组件传递值得操作 给予警告
子组件不能修改父组件的值,只能使用,单向数据流的作用
修改方法: 对父组件的值克隆一个副本:对子组件自己值进行修改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>父子间更多传值方式</title>
<script src="../../vue.js"></script>
</head>
<body>
<div id="app">
<counter :count="2" @change="GetToal"></counter>
<counter :count="3" @change="GetToal"></counter>
<div>{{total}}</div>
</div>
<script>
var counter = {
props:['count'],
template:'<div @click="HandleClick">{{number}}</div>',
data:function(){
return {
number:this.count
}
},
methods:{
HandleClick:function () {
this.number = this.number + 1;
this.$emit('change',1)
}
}
} var vm = new Vue({
el:"#app",
data:{
total:5
},
components:{
counter:counter
},
methods:{
GetToal:function (number) {
this.total += number
}
}
})
</script>
</body>
</html>
三 . 组件参数校验与非props特性
props 可以是数组或对象,用于接收来自父组件的数据。props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义校验和设置默认值。
非props特性: 1.当子组件 未接收并且使用 2.会显示在子组件的html属性上
props特性:不会显示在子组件的html属性上 props 可以是数组或对象,用于接收来自父组件的数据。props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义校验和设置默认值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件参数校验与非props特性</title>
<script src="../../vue.js"></script>
</head>
<body> <!--props 可以是数组或对象,用于接收来自父组件的数据。props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义校验和设置默认值。-->
<!--非props特性: 1.当子组件 未接收并且使用 2.会显示在子组件的html属性上-->
<!--props特性:不会显示在子组件的html属性上--> <div id="app">
<child :content="{id:123,name:'Dell'}" newd="newd"></child>
</div>
<script>
Vue.component('child',{
// props:{
// content:{
// type:[Number,String,Object],
// default:{id:1,name:'dong'},
// required: true,
// // validator: function (value) {
// // console.log(value)
// // if(value.name!=='dong'){
// // alert('姓名错误')
// // }
// // }
// }
// },
template:"<div>{{ content }}{{newd}}</div>"
})
var vm = new Vue({
el:"#app"
})
</script>
</body>
</html>
四 . 给组件绑定原生事件
原始步骤:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>给组件绑定原生事件</title>
<script src="../../vue.js"></script>
</head>
<body>
<div id="app">
<!--此处 @click="HancleClick" 监听自定义的事件-->
<child @click="HancleClick"></child>
</div>
<script>
Vue.component('child',{
//此处 @click="HancleClick" 监听原生的事件
template:'<div @click="HancleClick">Child</div>',
methods:{
HancleClick:function () {
// alert('Child click')
this.$emit('click')
}
}
})
var vm = new Vue({
el:"#app",
methods:{
HancleClick:function () {
alert('Father click')
}
}
})
</script>
</body>
</html>
添加 native 修饰符 .native
- 监听组件根元素的原生事件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>给组件绑定原生事件</title>
<script src="../../vue.js"></script>
</head>
<body>
<div id="app">
<child @click.native="HancleClick"></child>
</div>
<script>
Vue.component('child',{
template:'<div>Child</div>',
})
var vm = new Vue({
el:"#app",
methods:{
HancleClick:function () {
alert('Father click')
}
}
})
</script>
</body>
</html>
Vue2.5开发去哪儿网App 第四章笔记 上的更多相关文章
- Vue2.5开发去哪儿网App 第五章笔记 上
1.css动画原理 .fade-enter{ opacity: 0; } .fade-enter-active{ transition: opacity 2s; } .fade-leave-to{ o ...
- Vue2.5开发去哪儿网App 第四章笔记 下
1.解决非父子组件之间的传值问题 非父子组件传值(Bus/总线/发布订阅模式/观察者模式) 给 Vue类上挂在一个属性,然后创建vue实例时,实例就拥有了这个属性 Vue.prototype.bus ...
- Vue2.5开发去哪儿网App 第三章笔记 上
1. vue 生命周期函数 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 ...
- Vue2.5开发去哪儿网App 第五章笔记 下
1. 多个元素或组件的过渡 多个元素的过渡: <style> .v-enter,.v-leace-to{ opacity: 0; } .v-enter-active,.v-leave-ac ...
- Vue2.5开发去哪儿网App 第三章笔记 下
1.样式的绑定 我们可以传给 v-bind:class 一个对象,以动态地切换 class 例如: :class="{activated:isactivated}" 上面的语法 ...
- Vue2.5 开发去哪儿网App
Vue2.5开发去哪儿网App 技术栈和主要框架
- Vue2.5开发去哪儿网App 首页开发
主页划 5 个组件,即 header icon swiper recommend weekend 一. header区域开发 1. 安装 stylus npm install stylus --s ...
- Vue2.5开发去哪儿网App 城市列表开发之 Vuex实现数据共享及高级使用
一,数据共享 1. 安装: npm install vuex --save 2. 在src目录下 新建state文件夹,新建index.js文件 3. 创建一个 store import Vue f ...
- Vue2.5开发去哪儿网App 从零基础入门到实战项目
第1章 课程介绍本章主要介绍课程的知识大纲,学习前提,讲授方式及预期收获. 1-1 课程简介 试看第2章 Vue 起步本章将快速讲解部分 Vue 基础语法,通过 TodoList 功能的编写,在熟悉基 ...
随机推荐
- Java中各类Cache机制实现解决方案[来自CSDN]
摘要:在Java中,不同的类都有自己单独的Cache机制,实现的方法也可能有所不同,文章列举了Java中常见的各类Cache机制的实现方法,同时进行了综合的比较. 在Java中,不同的类都有自己单独的 ...
- hashable/iterable与orderable
################ # hashable协议 # ################ # 一个对象能被称为hashable,它必须实现__hash__与_eq__方法: >>& ...
- boost-实用工具:noncopyable、optional、assign
1.noncopyable 让一个类从noncopyable继承可以实现禁止对象的复制,使用需要包含头文件"boost/noncopyable.hpp"或"boost/u ...
- 第15章:MongoDB-聚合操作--聚合管道--$match
①$match 用于对文档集合进行筛选,里面可以使用所有常规的查询操作符. 通常会放置在管道最前面的位置,理由如下: 1:快速将不需要的文档过滤,减少后续操作的数据量 2:在投影和分组之前做筛选,查询 ...
- Ueditor Word图片转存交互
三.Word图片转存交互 1.图片转存原理 所谓word图片转存,是指UEditor为了解决用户从word中复制了一篇图文混排的文章粘贴到编辑器之后,word文章中的图片数据无法显示在编辑器中,也无法 ...
- Forward团队-爬虫豆瓣top250项目-团队编程项目开发环境搭建过程
本次结对编程和团队项目我都需要用python环境,所以环境的搭建是一样的.(本文部分内容引用自己博客:http://www.cnblogs.com/xingyunqi/p/7527411.html) ...
- hdu2222(ac自动机模板)
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #inclu ...
- noip2017d1t1
我们知道因为a,b互质,ax+by=n若存在一组解(x0,y0),则(x0+kb,y0-ka)也是一组解,而我们要保证有正整数解的情况下n最大,我们不妨将x0设为最大的负整数-1,考虑最大的y0能为多 ...
- eclipse选中某个字段没法高亮其他相同字段
eclipse选中某个字段无法高亮其他相同字段解决办法: window >> preference >> java >> Editor >> Mark ...
- JDBC架构
JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成: JDBC API: 提供了应用程序对JDBC的管理连接. JDBC Driver API: 支持JDBC管 ...