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

  1. vue学习-day02(自定义指令,生命周期)

    目录: 1.案例:品牌管理    2.Vue-devtools的两种安装方式    3.过滤器,自定义全局或私有过滤器    4.鼠标按键事件的修饰符    5.自定义全局指令:让文本框获取焦点   ...

  2. Vue 基础 day02

    Vue Devtools 安装 https://chrome.google.com/webstore/search/vue%20devtools?hl=zh-CN 需要翻墙 过滤器 概念: Vue.j ...

  3. vue学习day02

    vue 指令 1. 内容渲染指令 v-text 指令的缺点:会覆盖元素内部原有的内容! {{ }} 插值表达式:在实际开发中用的最多,只是内容的占位符,不会覆盖原有的内容! v-html 指令的作用: ...

  4. vue大型电商项目尚品汇(前台篇)day02

    现在正式回归,开始好好做项目了,正好这一个项目也开始慢慢的开始起色了,前面的准备工作都做的差不多了. 而且我现在也开始慢慢了解到了一些项目才开始需要的一些什么东西了,vuex.router这些都是必备 ...

  5. vue大型电商项目尚品汇(后台篇)day02

    这几天更新有点小慢,逐渐开始回归状态了.尽快把这个后台做完,要开始vue3了 3.添加修改品牌 用到组件 Dialog 对话框,其中visible.sync这个配置是修改他的显示隐藏的,label-w ...

  6. vue_shop(基于vue电商管理后台网站)

    vue_shop 目录 vue_shop day01 实现登录功能 项目预开发处理 Login.vue完整代码: 处理步骤: 添加element-ui的表单组件 添加第三方字体: 添加表单验证 导入a ...

  7. vue再学习

    day01 Vue 是什么? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架 vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合 使用Vu ...

  8. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  9. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  10. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

随机推荐

  1. JavaScript 三种工厂模式

    标签(空格分隔): JavaScript 简单工厂模式是工厂函数返回实例化对象或者对象,工厂函数作为一个方法. 工厂方法模式是工厂函数不作改变,将子类放在工厂原型中:工厂函数返回对应的实例化对象:re ...

  2. Sticky footers 套路

    [CSS Secrets] http://shop.oreilly.com/product/0636920031123.do 以饿了么商家信息的弹出层为例,布局如下: <!-- 饿了么 弹出层部 ...

  3. IOS CoreLocation框架的使用(用于地理定位)

    ●  在移动互联网时代,移动app能解决用户的很多生活琐事,比如 ●  导航:去任意陌生的地方 ●  周边:找餐馆.找酒店.找银行.找电影院 ●  在上述应用中,都用到了地图和定位功能,在iOS开发中 ...

  4. C++11之std::future和std::promise和std::std::packaged_task

    为什么C++11引入std::future和std::promise?C++11创建了线程以后,我们不能直接从thread.join()得到结果,必须定义一个变量,在线程执行时,对这个变量赋值,然后执 ...

  5. 字符ASCII转换

    实现效果: 关键知识: 实现代码: private void button1_Click(object sender, EventArgs e) { if (textBox1.Text != stri ...

  6. vue常用事件

    一.事件监听 1. banner_edit.$watch('bannerForm.type', function () { //执行其他代码 console.log(666); this.banner ...

  7. java json和对象互转

    开发过程中遇到一些对象转string和string转对象的问题,浪费了很久,现在用的熟练些了,总结如下: 1.字符串尽量定义成json可解析的,如{"name":"a&q ...

  8. 【洛谷P1288】取数游戏II

    取数游戏II 题目链接 显然,由于一定有一个0,我们可以求出从初始点到0的链的长度 若有一条链长为奇数,则先手可以每次取完一条边上所有的数, 后手只能取另一条边的数,先手必胜: 反之若没有奇数链,后手 ...

  9. CodeForces 501B Misha and Changing Handles(STL map)

    Misha hacked the Codeforces site. Then he decided to let all the users change their handles. A user ...

  10. Angularjs 数据循环

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...