Vue之组件
Vue之全局组件
全局组件可以被任何局部组件调用
<div id="app">
<!--这里是组件的使用-->
<global-component></global-component>
</div>
<script>
// 注意这里是component不是components
Vue.component('global-component',{
template:`
<div>
<h2>{{wanrong}}</h2> // 这里的变量可以获取data中返回的值
<h3>{{wanrong}}</h3>
</div>
`,
data(){
return {
wanrong:'Hello wanrong!',
}
}
});
new Vue({
el:'#app',
// 这里是组件的使用
template: `<global-component></global-component>`
})
</script>
Vue之局部组件
<div id="app"> </div>
<script>
// 第一步创建一个object对象
let Header = {
template: `
<div>
<h1>{{greeting}}</h1>
</div>
`,
data() {
return {greeting: 'Hello World'} // 这是一个单体函数用来给greeting传递值
}
};
let App = {
// 使用子组件
template: `
<app-header></app-header>
`,
// 在父组件中注册子组件
components:{
'app-header': Header,
}
};
new Vue({
el:'#app',
// 使用父组件
template:'<app></app>',
// 注册父组件
components: {
App,
}
})
</script>
Vue之父子组件的通信
<div id="app"> </div>
<script>
let Header = {
template: `
<div>
<h1>{{ greeting }}</h1>
<h2>{{ fatherData }}</h2>
</div>
`,
// 获取父亲组件传递过来的值(获取的是count的值)
props: ['fatherData'],
data() {
return {
greeting: 'Hello Vue', // 给greeting传递一个值
}
},
}; let App = {
template: `
<div>
<app-header :fatherData="count"></app-header>
</div>
`,
components: {
'app-header': Header,
},
data() {
return {
count: 100, // 给count传值
}
}
}; new Vue({
el: '#app',
template: `<App></App>`,
components: {
App,
}
})
</script>
Vue之子父组件的通信
<div id="app"> </div>
<script>
let Header = {
template: `
<div>
<button v-on:click="sonClick">点击给父组件传递数据</button> // 点击button按钮会触发sonClick这个方法
</div>
`,
methods: {
sonClick: function () {
this.$emit('click',0.1); // 会自动的触发下面的click方法,并且会给fatherClick函数传递一个0.1这个值
}
},
}; let App = {
template: `
<div>
<span v-bind:style="{ fontSize: postFontSize + 'em' }">father</span> // em可以理解为代表单位,例如:px等等
<app-header v-on:click="fatherClick"></app-header> // 上面的$emit会自动的获取click事件,并执行click事件所代表的的fatherClick函数,
这里不一定是一个函数也可以是一个表达式。
</div>
`,
components: {
'app-header': Header, // 注册app-header
},
data() {
return {
postFontSize: 1,
}
},
methods: {
fatherClick: function (value) {
this.postFontSize += value; // 会获取到上面传递的值0.1,并修改后传递给postFontSize这个值
}
} }; new Vue({
el: '#app',
template: `<App></App>`,
components: {
App,
}
})
</script>
vue非父子组件的通信
<div id="app">
<wjs></wjs>
<gxx></gxx>
</div>
<script>
// 创建一个中间调度器
let zq = new Vue();
let wjs = {
template: `
<div>
<h1>这是wjs</h1>
<button @click="wjs_click">点击向gxx说话</button>
</div>
`,
methods: {
wjs_click: function () {
// 向中间调度器提交事件
zq.$emit('wjs_say','ainio')
}
}
}; let gxx = {
template: `
<div><h1>这是gxx</h1>{{say}}</div>
`,
data(){
return {
say: '',
}
},
mounted(){
// 监听中间调度器中的方法
let that = this; // 因为this的指向问题所以要处理
zq.$on('wjs_say',function (data) {
that.say = data
})
}
}; const app = new Vue({
el: '#app',
components: {
wjs: wjs,
gxx: gxx,
}
})
</script>
Vue组建系统之混入
<div id="app">
<my-gxx></my-gxx>
<my-zq></my-zq>
</div>
<script>
let mixs = { // 提高代码的复用性
methods: {
show: function (name) {
alert(name + '来了')
},
hide: function (name) {
alert(name + '走了')
},
},
}; let mygxx = {
template: `
<div>
<button v-on:click="show('gxx')">点击显示gxx来了</button> // 绑定click事件,执行show函数
<button v-on:click="hide('gxx')">点击显示gxx走了</button> // 绑定click事件,执行hide函数
</div>
`,
mixins: [mixs], // 这样操作以后就不需要在进行重复的注册和使用组件了
}; let myzq = {
template: `
<div>
<button v-on:mouseenter="show('zq')">点击显示zq来了</button>
<button v-on:mouseleave="hide('zq')">点击显示zq走了</button>
</div>
`,
mixins: [mixs],
}; new Vue({
el: '#app',
components: {
'my-gxx': mygxx,
'my-zq': myzq,
}
})
Vue组建系统之插槽
<div id="app">
<global-component>首页</global-component>
<global-component>免费课程</global-component>
<global-component>轻课</global-component>
<global-component>wjs</global-component>
<global-component>gxx</global-component>
</div>
<script>
Vue.component('global-component',{
template: `
<div class="box"><slot></slot></div> // slot就是插槽的写法
`,
},
); new Vue({
el: "#app", })
</script>
Vue组建系统之具名插槽
<div id="app">
<global-component>
<div slot="home">首页</div>
<div slot="freecourse">免费课程</div>
<div slot="wjs">wjs</div>
<div slot="gxx">gxx</div>
</global-component>
</div>
<script>
Vue.component('global-component', {
template: `
<div class="box">
<slot name="freecourse"></slot>
<slot name="gxx"></slot>
<slot name="wjs"></slot>
<slot name="home"></slot>
</div>
`,
},
); new Vue({
el: "#app", })
</script>
Vue之组件的更多相关文章
- vue.js组件化开发实践
前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...
- 如何理解vue.js组件的作用域是独立的
vue.js组件的作用域是独立,可以从以下三个方面理解: 1.父组件模板在父组件作用域内编译,父组件模板的数据用父组件内data数据:2.子组件模板在子组件作用域内编译,子组件模板的数据用子组件内da ...
- Vue 子组件向父组件传参
直接上代码 <body> <div id="counter-event-example"> <p>{{ total }}</p> & ...
- VUE.JS组件化
VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...
- Vue动态组件
前面的话 让多个组件使用同一个挂载点,并动态切换,这就是动态组件.本文将详细介绍Vue动态组件 概述 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以实现动 ...
- vue中组件的四种方法总结
希望对大家有用 全局组件的第一种写法 html: <div id = "app"> <show></show></div> js: ...
- 如何抽象一个 Vue 公共组件
之前一直想写一篇关于抽象 Vue 组件的随笔,无奈一直没想到好的例子.恰巧最近为公司项目做了一个数字键盘的组件,于是就以这个为例聊聊如何抽象 Vue 的组件. 先上 Demo 与 源码.(demo最好 ...
- vue的组件和生命周期
Vue里组件的通信 通信:传参.控制.数据共享(A操控B做一个事件) 模式:父子组件间.非父子组件 父组件可以将一条数据传递给子组件,这条数据可以是动态的,父组件的数据更改的时候,子组件接收的也会变化 ...
- 为什么VUE注册组件命名时不能用大写的?
这段时间一直在弄vue,当然也遇到很多问题,这里就来跟大家分享一些注册自定义模板组件的心得 首先"VUE注册组件命名时不能用大写"其实这句话是不对的,但我们很多人开始都觉得是对的, ...
- vue的组件化运用(数据在两个组件互传,小问题总结)
一.vue的组件化应用 首先,知道有哪些相关的属性需要用到,再慢慢去理解,运用. 1.两个vue页面 2. slot占位符(可用可不用) 3.props内置属性 4.watch监听函数 5.impor ...
随机推荐
- 转载:基于HALCON的模板匹配方法总结
转载链接: http://blog.csdn.net/b108074013/article/details/37657801 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总 ...
- ThinkPHP同时操作多个数据库
除了在预先定义数据库连接和实例化的时候指定数据库连接外,我们还可以在模型操作过程中动态的切换数据库,支持切换到相同和不同的数据库类型.用法很简单, 只需要调用Model类的db方法,用法: $this ...
- 08-认识margin
1.margin margin:外边距的意思.表示边框到最近盒子的距离. /*表示四个方向的外边距离为20px*/ margin: 20px; /*表示盒子向下移动了30px*/ margin-top ...
- Bash:精华
# 声明索引数组(以从0开始的整数做索引的数组).以下三种等效. declare -a array declare array=(this is numeric array ) array=(this ...
- ReactiveX 学习笔记(3)转换数据流
Transforming Observables 本文的主题为转换 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(二)Transform ...
- zabbix简易安装指南
1.php版本为5.5.37 mysql版本为5.5 nginx使用的是tengine2.2.1 2.系统为centos 7.2 最小化安装 3.使用阿里云的epel扩展源 4.首先安装依赖 yum ...
- SQL Server 优化---为什么索引视图(物化视图)需要with(noexpand)强制查询提示
本文出处:http://www.cnblogs.com/wy123/p/6694933.html 第一次通过索引视图优化SQL语句,以及遇到的一些问题,记录一下. 语句分析 最近开发递交过来一个查询统 ...
- svn的上传冲突问题
上传报错实际是 1 . 之前上传的代码与现代码不一样 2. 上传的代码中有错误 需要先拉下来,对比删除不要的,再上传 eclipse加入svn : 1.import ---从svn检出项目---创 ...
- 三种方式监听NGUI的事件方法
NGUI研究院之三种方式监听NGUI的事件方法(七) NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定 ...
- 吴裕雄 python神经网络 水果图片识别(3)
import osimport kerasimport timeimport numpy as npimport tensorflow as tffrom random import shufflef ...