目录
父-》子传值 (父组件给子组件传值,值优先级高,传的值不要直接修改)
流程
main.js-->app.vue->component文件夹的组件
文件夹结构
import App from './App.vue'
// 关闭生产提示
Vue.config.productionTip = false
// 创建vue实例对象
new Vue({
//残缺版无解析引擎 vue.js为完整版 vue.runtime··.js 为运行的核心
// 调用render渲染 必须有返回值 参数是创建元素的函数
// render(createElement){return createElement("标签名",'填充值')}
render: h => h(App),
}).$mount('#app')
<html lang="">
<head>
<meta charset="utf-8">
<!-- 针对IE浏览器配置,让其以最高形式渲染项目 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- 开启移动端理想视口 -->
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!-- 配置页签图标 BASE_URL为public的路径 -->
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<!-- 配置网站标题 -->
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<!-- 浏览器不支持js时,显示此内容 -->
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<!-- 容器 -->
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
vue inspect>output.js
//自定义配置文件,在src文件夹同级下建vue.config.js 写配置
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
// 关闭代码检查
lintOnSave:false
})
ref 属性
<template>
<div>
<!-- 标识标签 用于获取dom 用this.$refs.名 -->
<!-- 用于子组件获取其组件的vc -->
<h1 ref="gets">{ {ha}}</h1>
<button @click="show">点我</button>
<School ref="school" />
</div>
</template>
<script>
import School from './components/School.vue'
export default {
data() {
return {
ha: '欢迎',
};
},
components:{
School
},
methods: {
show(){
console.log(this.$refs.gets)
console.log(this.$refs.school)
}
},
}
</script>
传值
父-》子传值 (父组件给子组件传值,值优先级高,传的值不要直接修改)
<!-- 单向绑定的结果为引号中表达式的值 -->
<School :name = "11" ref="school" />
School.vue 组件
export default {
data(){
return {msg:"哈哈",name1:this.name+100}
},
name:"School",
// 接受传进来的参数 赋到vc中,不可修改
/* props:['name'] */
// 接受数据对数据类型限制
/* props:{
name:Number
} */
// 接到的值不要直接修改,可以间接修改(中间变量)
// 接到的值优先data中的值使用
props:{
name:{
try:Number,
required:true,
default:23,
}
}
}
子组件给父组件传值
alert('我被点了')
}
<div class="school">
{ {msg}}
<button @click="demo1">发送学校</button>
<button @click="del">解绑事件</button>
</div>
</template>
<script>
export default {
name:"School",
data() {
return {
msg:"盂县一中"
}
},
methods: {
demo1(){
//触发该vc的自定义事件,由父组件进行绑定
this.$emit('school',this.msg,1,2,3)
},
del(){
// 解绑组件自定义事件
this.$off(['school'])
},
},
}
</script>
<style scoped>
.school{
background-color:bisque;
}
</style>>
任意组件传值(全局事件总线)
import Vue from 'vue'
// 引入组件
import App from './App.vue'
// 关闭生产提示
Vue.config.productionTip = false
new Vue({
el:"#app",
//残缺版无解析引擎 vue.js为完整版 vue.runtime··.js 为运行的核心
// 调用render渲染 必须有返回值 参数是创建元素的函数
// render(createElement){return createElement("标签名",'填充值')}
render:h=>h(App),
beforeCreate(){
// 将VM作为VC放到VUE的原型上 解析标签时才会自动实例化VC
Vue.prototype.$bus = this
}
})
<div class="school">
{ {msg}}
<button @click="demo1">发送学校</button>
<button @click="del">解绑事件</button>
</div>
</template>
<script>
export default {
name:"School",
data() {
return {
msg:"盂县一中"
}
},
mounted(){
//在bus上绑定并监听事件的触发 需要自动绑定
this.$bus.$on('brother',(val)=>{
console.log(val,123)
})
},
methods: {
demo1(){
//触发该vc的自定义事件,由父组件进行绑定
this.$emit('school',this.msg,1,2,3)
},
del(){
// 解绑组件自定义事件
this.$off(['school'])
},
},
beforeDestroy() {
// 解绑VC上的事件
this.$bus.$off("brother")
},
}
</script>
<style scoped>
.school{
background-color:bisque;
}
</style>>
<div class="school">
{ { name }}
<button @click="brother">兄弟传值</button>
</div>