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之组件的更多相关文章

  1. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  2. 如何理解vue.js组件的作用域是独立的

    vue.js组件的作用域是独立,可以从以下三个方面理解: 1.父组件模板在父组件作用域内编译,父组件模板的数据用父组件内data数据:2.子组件模板在子组件作用域内编译,子组件模板的数据用子组件内da ...

  3. Vue 子组件向父组件传参

    直接上代码 <body> <div id="counter-event-example"> <p>{{ total }}</p> & ...

  4. VUE.JS组件化

    VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...

  5. Vue动态组件

    前面的话 让多个组件使用同一个挂载点,并动态切换,这就是动态组件.本文将详细介绍Vue动态组件 概述 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以实现动 ...

  6. vue中组件的四种方法总结

    希望对大家有用 全局组件的第一种写法 html: <div id = "app"> <show></show></div> js: ...

  7. 如何抽象一个 Vue 公共组件

    之前一直想写一篇关于抽象 Vue 组件的随笔,无奈一直没想到好的例子.恰巧最近为公司项目做了一个数字键盘的组件,于是就以这个为例聊聊如何抽象 Vue 的组件. 先上 Demo 与 源码.(demo最好 ...

  8. vue的组件和生命周期

    Vue里组件的通信 通信:传参.控制.数据共享(A操控B做一个事件) 模式:父子组件间.非父子组件 父组件可以将一条数据传递给子组件,这条数据可以是动态的,父组件的数据更改的时候,子组件接收的也会变化 ...

  9. 为什么VUE注册组件命名时不能用大写的?

    这段时间一直在弄vue,当然也遇到很多问题,这里就来跟大家分享一些注册自定义模板组件的心得 首先"VUE注册组件命名时不能用大写"其实这句话是不对的,但我们很多人开始都觉得是对的, ...

  10. vue的组件化运用(数据在两个组件互传,小问题总结)

    一.vue的组件化应用 首先,知道有哪些相关的属性需要用到,再慢慢去理解,运用. 1.两个vue页面 2. slot占位符(可用可不用) 3.props内置属性 4.watch监听函数 5.impor ...

随机推荐

  1. 转载:基于HALCON的模板匹配方法总结

    转载链接:     http://blog.csdn.net/b108074013/article/details/37657801 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总 ...

  2. ThinkPHP同时操作多个数据库

    除了在预先定义数据库连接和实例化的时候指定数据库连接外,我们还可以在模型操作过程中动态的切换数据库,支持切换到相同和不同的数据库类型.用法很简单, 只需要调用Model类的db方法,用法: $this ...

  3. 08-认识margin

    1.margin margin:外边距的意思.表示边框到最近盒子的距离. /*表示四个方向的外边距离为20px*/ margin: 20px; /*表示盒子向下移动了30px*/ margin-top ...

  4. Bash:精华

    # 声明索引数组(以从0开始的整数做索引的数组).以下三种等效. declare -a array declare array=(this is numeric array ) array=(this ...

  5. ReactiveX 学习笔记(3)转换数据流

    Transforming Observables 本文的主题为转换 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(二)Transform ...

  6. zabbix简易安装指南

    1.php版本为5.5.37 mysql版本为5.5 nginx使用的是tengine2.2.1 2.系统为centos 7.2 最小化安装 3.使用阿里云的epel扩展源 4.首先安装依赖 yum ...

  7. SQL Server 优化---为什么索引视图(物化视图)需要with(noexpand)强制查询提示

    本文出处:http://www.cnblogs.com/wy123/p/6694933.html 第一次通过索引视图优化SQL语句,以及遇到的一些问题,记录一下. 语句分析 最近开发递交过来一个查询统 ...

  8. svn的上传冲突问题

    上传报错实际是 1 . 之前上传的代码与现代码不一样 2. 上传的代码中有错误 需要先拉下来,对比删除不要的,再上传 eclipse加入svn :  1.import  ---从svn检出项目---创 ...

  9. 三种方式监听NGUI的事件方法

    NGUI研究院之三种方式监听NGUI的事件方法(七) NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定 ...

  10. 吴裕雄 python神经网络 水果图片识别(3)

    import osimport kerasimport timeimport numpy as npimport tensorflow as tffrom random import shufflef ...