
组件之间的通信
父传子:正向传递 vue允许 自动触发
props
1.先在子组件中定义期待的属性名和类型
2.在父组件中调用子组件的位置 添加 v-bind:自定义属性名
注意:props只读属性 ====》data(){ 属性 }
子传父:逆向传递 vue允许 主动触发
自定义事件 click blur focus… 监听自定义事件触发的函数
1.在子组件中定义函数 ===》 this.$emit( ‘自定义事件名’ ,传递的参数 );
2.在父组件中调用子组件的位置 < son @自定义事件名= ‘fn()’>< /son> 添加一个绑定一个自定义事件
fn(val)函数中 val就是传递来的参数
xxx.vue === 》 组件


官网文档:https://cli.vuejs.org/zh/guide/
Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,简化了我们创建webpack-vue项目的过程。
提供:
@vue/cli 实现的交互式的项目脚手架。@vue/cli + @vue/cli-service-global 实现的零配置原型开发。@vue/cli-service),该依赖:
Vue CLI 致力于将 Vue 生态中的工具基础标准化。它确保了各种构建工具能够基于智能的默认配置即可平稳衔接,这样你可以专注在撰写应用上,而不必花好几天去纠结配置的问题。与此同时,它也为每个工具提供了调整配置的灵活性,无需 eject。
CLI (@vue/cli) 是一个全局安装的 npm 包,提供了终端里的 vue 命令。它可以通过 vue create 快速搭建一个新项目,或者直接通过 vue serve 构建新想法的原型。你也可以通过 vue ui 通过一套图形化界面管理你的所有项目。
安装 node.js 、 npm 、 cnpm
npm install -g @vue/clivue --version

vue create 项目名注意项目名不能出现大写字母!!! 如果项目名带有大写字母,会出现如下错误提示。

按上下键调整:选择第三个 Manually select features 手动选择 自定义预设
Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection) //选择将来项目中用到的依赖 空格:选择 a:全选 i:反选
选择完毕按下 enter键






项目创建过程中。。。。 我的心在等待。。。

显示这样的页面,表示项目创建成功;
项目目录解析:


浏览器输入路径:访问该项目。出现如下页面
在很多 Vue 项目中,我们使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页面内指定一个容器元素。
这种方式在很多中小规模的项目中运作的很好,在这些项目里 JavaScript 只被用来加强特定的视图。但当在更复杂的项目中,或者你的前端完全由 JavaScript 驱动的时候,下面这些缺点将变得非常明显:
\文件扩展名为 .vue 的 single-file components(单文件组件) 为解决上述问题提供了方法
在components文件夹下 新建文件扩展名为 MyCom.vue的文件,文件包含以下内容:
//单文件组件的定义
/*
其中包含 css ,js , html模板内容
*/
<template>
<div>
<h1>我是第一个组件中的数据</h1>
</div>
</template>
//组件的js
<script>
export default {
props: {
},
data () {
return {
}
},
methods: {
},
computed: {
}
}
</script>
//组件的css样式
<style lang="less" scoped>
h1{
background-color: red;
color: blue;
font-size: 200px;
}
</style>注意:scoped属性表示 该样式只在当前组件中生效。
修改main.js中内容:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
//引入自定义的aaa.vue组件
import aaa from './components/aaa'
Vue.config.productionTip = false
new Vue({
router,
store,
render: h => h(aaa)//使用aaa.vue组件
}).$mount('#app')打开浏览器,运行观察效果:

单文件组件的特点
通过main.js把App.vue中的内容渲染到html页面上!

render 函数 :此处为什么要使用render函数来进行页面的渲染,为什么不直接使用template模板引入呢?
**因为:**通过 import Vue from 'vue'引入的是精简版的vue.js 并不是完整版的vue.js 完整版的vue.js包含 核心代码和模板解析器,最终项目上线时,模板解析器其实是不需要的,所以vue会搞精简版的vue.js供用户使用。 如果直接使用template模板引入,这个精简版的vue.js是无法对模板进行解析的,但是可以通过提供的render函数进行解析。
相当于:
new Vue({
template:`<h1>你好哈哈哈</h1>`
}) 等同于代码
//render函数要有返回值
new Vue({
render:function(createElement){ return createElement('h1','你好哈哈哈')}
就等同于代码
render:createElement=>createElement('h1','你好哈哈哈')
就等同于代码
render:h=>h(App) 直接渲染根组件
})$mount()方法的作用等同于 el:""绑定区域。
vue脚手架隐藏了所有的webpack相关配置,如果想查看具体的配置可以执行 vue inspect > output.js 这样会在目录下生成一个文件output.js 里边包含所有的配置信息。
如果想做自定义的配置请参考vue官网vue-cli官方文档:

**练习案例:**自定义组件显示到首页。
在main.js中通过Vue.component()方法注册全局组件。

Vue.config.productionTip = false 这行代码是在服务启动成功后 会在浏览器的控制台有一个 提示代码。
如果值为false 不显示 如下红框中代码 如果为true就显示如下代码。

页面中有一个input输入框,当进行输入的时候,输入框下面的内容会进行大写的同步显示 当输入完成后,按enter键就会弹出输入的内容


实现步骤


<template>
<div id="max">
<h1>这里是父组件</h1>
<!--引入两个子组件-->
<son1></son1>
<son2></son2>
</div>
</template>
<script>
import son1 from '@/components/son1.vue'
import son2 from '@/components/son2.vue'
import Son1 from './son1.vue'
import Son2 from './son2.vue'
export default {
components: {
son1,
son2
}
}
</script>
<style lang='less' scoped>
#max{
width: 800px;
height: 400px;
border: 2px solid red;
text-align: center;
}
</style>#son1.vue 文件
<template>
<div class="son1">
<p>这里是子组件1</p>
<button @click="sendMsg">把son1Data传递给son2组件</button>
</div>
</template>
<script>
import bus from '@/components/eventBus.js'
export default {
data () {
return {
son1Data:'son1组件的数据'
}
},
methods: {
sendMsg(){
bus.$emit('send', this.son1Data)
}
}
};
</script>
<style lang="less" scoped>
.son1{
width: 300px;
height: 300px;
border:1px solid blue;
float: left;
}
</style># son2.vue文件
<template>
<div class="son1">
<p>这里是子组件2</p>
接收到son1组件传递来的数据:{{msg}}
</div>
</template>
<script>
import bus from '@/components/eventBus.js'
export default {
data () {
return {
msg:''
}
},
created () {
//$on()方法 监听当前实例上的自定义事件。事件可以由 vm.$emit 触发。回调函数会接收所有传入事件触发函数的额外参数。
bus.$on('send', val=>{
this.msg = val;
})
}
};
</script>
<style lang="less" scoped>
.son1{
width: 300px;
height: 300px;
border:1px solid green;
float: right;
}
</style>//导入vue实例的构造函数
import Vue from 'vue';
export default new Vue()
需求说明 使用Vue脚手架Vue-cli快速搭建项目 使用父组件向子组件传递图片的地址 在子组件中接收图片地址,使用v-for指令遍历渲染显示图片


s //导入vue实例的构造函数 import Vue from ‘vue’; export default new Vue() ```
需求说明 使用Vue脚手架Vue-cli快速搭建项目 使用父组件向子组件传递图片的地址 在子组件中接收图片地址,使用v-for指令遍历渲染显示图片