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 ...
随机推荐
- HTML页面过渡效果大全
IE要求: 在IE5.5及以上版本的浏览器中.启用网页过渡效果 默认情况下都已经启用了,如果需要手动启用则只需在Internet选项中: Advanced(高级) - Browsing(浏览) - E ...
- 判断pc端或移动端并跳转
判断pc端或移动端并跳转 代码目录: index.html代码: <!DOCTYPE html> <html lang="en"> <head> ...
- mingw 搭建Emscripten 环境
mingw 环境的搭建可以参考网上很多文章,不复杂.但在搭建Emscripten 环境之前需要配置git 和python 和MSbuild.exe 还需要安装camke 默认安装之后应该是添加了 系统 ...
- 关于 C++ 默认构造函数 的几个误区 转载
https://blog.csdn.net/ccrazyman/article/details/8138425
- jquery下插入标签以及clone的应用
//内部插入 插入一个儿子 //var $ele = $("<h1></h1>")//创建h1标签 // $ele.html('hello') // $el ...
- Zabbix笔记
简单检查中的icmppingloss[<target>,<packets>,<interval>,<size>,<timeout>] 结 ...
- Hibernate学习笔记2.2(Hibernate基础Annotation配置)
如果数据库表名与类名不一致 可以用使用 @Table(name="_teacher") 来指定表名,没有就会自己创建 也可以在配置文件上修改 为class添加table属性 如果什 ...
- 关于在VS2008和VS2010中禁用及卸载Visual Assist X的方法研究——转载
禁用和启用 此方法对于VS2008和VS2010 都适用. 在VS2008或VS2010菜单栏中选择“VassistX”选项卡,找到“Enable/Disable Visual Assist X” ...
- c++之enum(枚举)可以没有枚举名
转载自https://blog.csdn.net/u013591613/article/details/71215000 C_enum(枚举)可以没有枚举名 如果声明枚举类型时没有指定枚举名,其作用就 ...
- SQL调用C# dll(第二中DLL,强名称密匙)
参考:微软官网 https://msdn.microsoft.com/zh-cn/library/ms345106(es-es).aspx 1.新建项目 SQLDllTestUsingNew Clas ...