vue---day02
1. 全局组件的注册 - 创建根实例的时候,data可以是object,也可以是函数
- 创建组件的时候,data必须是函数 1.1 创建
         Vue.component('global-component',{
             template:`
                 <div>
                     <h1>{{ hello }}</h1>
                 </div>
             `,
             data(){
                 return {
                     hello:'hello'
                 }
             },
         })
1.2 使用
        let vm = new Vue({
             el:'#app',
             template:`
                 <global-component></global-component>
             `,
         })
1.3 使用
<div id="app">
<global-component></global-component>
</div> let vm = new Vue({
el:'#app',
})
2. 局部组件
    - data必须是函数(单体函数)
    - 没有el属性    
    2.1 创建局部组件  实质就是创建JavaScript object
         let Header = {
             template:`
                 <div>{{ hello }}</div>
             `,
             data(){
                 return {
                     'hello':'hello',
                 }
             },
         };
     2.2 注册
         2.2.1
             //单独使用
             new Vue({
                 el:'#app',
                 template:`<app-header></app-header>`,
                 components:{
                     'app-header':Header,
                 },
             });
         2.2.2
             //嵌套使用
             let App = {
                 template:`
                     <div>111</div>
                     <app-header></app-header>
                 `,
                 components:{
                     'app-header':Header,
                 },
             };
             new Vue({
                 el:"#app",
                 template:`<App></App>`,
                 components:{
                     App,
                 },
             });
3. 组件之间通信
    - 父子组件之间的数据 传递拥props  接受父组件的一个事件
    - 子父组件之间的数据 传递拥$emit  触发父组件的一个事件
    3.1 父子之间通信
<div id="app>
...
</div> let Header = {
template:`
<div>{{ xxx }}</div>
`,
props:['xxx'],
}; let App = {
template:`
<app-header :xxx='parent-data'></app-header>
`, components:{
'app-header':Header,
},
data(){
return {
'parent-data':'父组件的数据',
}
}
}; new Vue({
el:'#app',
template: `<App></App>`,
components:{
App,
}
})
3.2 子父组件的通信
    <div id="app">
         </div>
        let Header = {
             template: `
                 <div>
                     <button @click="xxx">给父组件传递数据</button>
                 </div>
             `,
             data() {
                 return {
                     'childData': '子组件的数据'
                 }
             },
             methods: {
                 xxx() {
                     this.$emit('ooo',this.childData);
                 }
             }
         };
        let App = {
             template: `
                     <div>
                         <h1>父组件接受的数据---{{ childData }}</h1>
                         <app-header @ooo="get_data"></app-header>
                     </div>
             `,
             data() {
                 return {
                     'childData': '1',
                 }
             },
             components: {
                 'app-header': Header,
             },
             methods: {
                 get_data(value) {
                     console.log(111,value)
                     this.childData = value;
                 }
             },
        };
        new Vue({
             el: '#app',
             template: `<App></App>`,
             components: {
                 App,
             },
        })
4. 混入
    - 定义一个mixs  object 然后写方法methods(){}
    - 使用:mixins = [minx]
    - 解决代码重用
<div id="app">
<dog></dog>
<cat></cat>
</div> <script> let mixs = {
methods:{
show(value){
alert(value+'来了');
},
hide(value){
alert(value+'走了');
},
}
}; let Cat = {
template: `
<div>
<button @click="show('小猫')">小猫来了</button>
<button @click="hide('小猫')">小猫走了</button>
</div>
`,
data() { },
mixins:[mixs]
}; let Dog = {
template: `
<div>
<button @mouseenter="show('小狗')">Come</button>
<button @mouseleave="hide('小狗')">Go</button>
</div>
`,
mixins: [mixs],
}; new Vue({
el: '#app',
components: {
'dog':Dog,
'cat':Cat,
},
}) </script>
5. 插槽
<div id="app">
<global-components>首页</global-components>
<global-components>轻课</global-components>
<global-components>学位课</global-components>
</div> Vue.components('global-components',{
template:`
<div><slot></slot></div>
`
}) new Vue({
el:'#app',
})
6. 具名插槽
<div id="app">
<global-components>
<div>
<slot name="header>这是头部</slot>
<slot name="footer>这是尾部</slot>
</div>
</global-components> </div> Vue.components('global-components',{
template:`
<div>
<slot name="footer"></slot>
<slot name="header"></slot>
</div>
`
}) new Vue({
el:'#app',
})
vue---day02的更多相关文章
- vue学习-day02(自定义指令,生命周期)
		目录: 1.案例:品牌管理 2.Vue-devtools的两种安装方式 3.过滤器,自定义全局或私有过滤器 4.鼠标按键事件的修饰符 5.自定义全局指令:让文本框获取焦点 ... 
- Vue 基础 day02
		Vue Devtools 安装 https://chrome.google.com/webstore/search/vue%20devtools?hl=zh-CN 需要翻墙 过滤器 概念: Vue.j ... 
- vue学习day02
		vue 指令 1. 内容渲染指令 v-text 指令的缺点:会覆盖元素内部原有的内容! {{ }} 插值表达式:在实际开发中用的最多,只是内容的占位符,不会覆盖原有的内容! v-html 指令的作用: ... 
- vue大型电商项目尚品汇(前台篇)day02
		现在正式回归,开始好好做项目了,正好这一个项目也开始慢慢的开始起色了,前面的准备工作都做的差不多了. 而且我现在也开始慢慢了解到了一些项目才开始需要的一些什么东西了,vuex.router这些都是必备 ... 
- vue大型电商项目尚品汇(后台篇)day02
		这几天更新有点小慢,逐渐开始回归状态了.尽快把这个后台做完,要开始vue3了 3.添加修改品牌 用到组件 Dialog 对话框,其中visible.sync这个配置是修改他的显示隐藏的,label-w ... 
- vue_shop(基于vue电商管理后台网站)
		vue_shop 目录 vue_shop day01 实现登录功能 项目预开发处理 Login.vue完整代码: 处理步骤: 添加element-ui的表单组件 添加第三方字体: 添加表单验证 导入a ... 
- vue再学习
		day01 Vue 是什么? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架 vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合 使用Vu ... 
- Vue.js 和 MVVM 小细节
		MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ... 
- wepack+sass+vue 入门教程(三)
		十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ... 
- wepack+sass+vue 入门教程(二)
		六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ... 
随机推荐
- C++学习之【使用位操作符求素数分析】
			先放普通代码: #include <iostream> using namespace std; void getPrime_1() { const int MAXN = 100; boo ... 
- IOS6 的特性 及 autoalyout的作用
			1.如果控件有默认的内容(宽高), 我们只需设置autoalyout的X/Y, autolayout会自动计算出宽高 2.Xcode6将Storyboard变成豆腐干的目的:在Xcode6之前, 如果 ... 
- bootstrap table 怎么实现前两列固定冻结?
			$("#Table").bootstrapTable('destroy').bootstrapTable({ pagination: true,//分页 minimumCountC ... 
- 管道(Pipelines)模型
			Pipeline模型最早被使用在Unix操作系统中.据称,假设说Unix是计算机文明中最伟大的发明,那么,Unix下的Pipe管道就是尾随Unix所带来的还有一个伟大的发明[1].我觉得管道的出现,所 ... 
- BZOJ1856:[SCOI2010]字符串(卡特兰数,组合数学)
			Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ... 
- Spring 声明式事务管理方式
			声明式事务管理,基于AOP对目标代理,添加环绕通知,比编码方案优势,不具有侵入式,不需要修改原来的代码. 1.基于XML配置的声明式事务管理方案(案例) 接口Service public i ... 
- MVC学习二:Controller和View关系
			控制器(Controller)主要是定义方法和加载视图(View) 1.控制器中的Action方法返回值的类型ActionResult,string 2.控制器中Action方法接收浏览器参数方式: ... 
- 【luogu P4462 [CQOI2018]异或序列】 题解
			题目链接:https://www.luogu.org/problemnew/show/P4462 ax+ax-1+...+ay = cntx+cnty 这样把一段序列变成两段相加跑莫队. #inclu ... 
- AngularJS  五  过滤器及验证
			AngularJS过滤: AngularJS过滤器允许我们格式化数据以在UI上显示而不改变原始格式. 格式: 一些比较重要的过滤器: Number Filter ... 
- 菜鸟笔记 -- Chapter 6.1 面向对象概述
			6.1 面向对象概述 在程序开发的初期人们使用结构化开发语言,但是随着时间的流逝,软件的规模越来越庞大,结构化语言的弊端逐渐暴露出来,开发周期被无限制拖延,产品质量也不尽如人意,人们终于发现结构化语言 ... 
