Vue脚手架学习 - 1

1. Vue 与 VueComponent 的内置关系

VueComponent实例对象.proto === VueComponent.prototype.proto === vm.proto === Vue.prototype

2.单文件组件

复制代码
<template>
</template>

<script>
	export default {
		name: [Vue的文件名],
		data() {
			return {
			
			}
		}
	}
</script>
<style>
</style>

3. Vue-Cli

3.1 $refs
复制代码
<!-- ref 加在组件上是获取该组件的实例对象,加在html标签是获取该标签的dom对象(本质上相当于加了个id给标签) -->
<button ref="but">
<School ref="schoolRef"/>

...
console.log(this.$refs.but) //<>  
console.log(this.$refs.but) 
3.2 props

组件通信

3.2.1 父 -> 子 传数据

父亲通过在子组件上定义标签 将参数传给儿子,儿子通过propos:\[\]的形式获取传过来的数据,可通过this.属性获取

App.vue

vue 复制代码
<template>
  <div id="app">
    <school schoolName="实验学校" position="广东"/>
  </div>
</template>

school.vue

vue 复制代码
<div>
 <div>{{ schoolName }}</div>
</div>
<script>
	export default{
        name: 'school',
        props: ['schoolName', 'position'] //通过数组形式传参数
</script>
3.2.2 子 -> 父 传数据

父亲在子组件标签上单向绑定 一个方法,儿子通过props:\[\] 获取传过来的方法(props里的参数需要用 '')通过this.方法名调用父亲所绑定的方法,从而给父亲传参数

App.vue

vue 复制代码
<template>
  <div id="app">
      <!-- getSchoolName不可以加括号,否则报错 -->
    <school :getSchoolName="getSchoolName" /> 
  </div>
</template>

<script>

export default {
  name: 'App',
  methods: {
      //接收儿子传来的schoolName
    getSchoolName(name) {
      //getSchoolName的this对象是子组件实例对象
      console.log(name)
    }
  },
  mounted() {
  }
}
</script>

school.vue

vue 复制代码
<template>
    <div>
        <div>{{schoolName}}</div>
         <button @click="getSchoolNameForApp">点我App.vue获取我的名字</button>
    </div>
</template>

<script>
    export default{
        name: 'school',
        data() {
            return {
            }

        },
        methods: {
            //子定义的方法不要和父亲传过来的方法重名,不然会报错
            getSchoolNameForApp() {
                //子组件对象调用父亲的方法,将schoolName传了过去
                this.getSchoolName(this.schoolName)
            }
        },
        mounted() {
            
        },
        props: ['getSchoolName'] 
    }
</script>
3.3 混入mixin

多个组件存在相同的代码时,可以写在mixin.js 中,并对外暴露,而需要这些代码的组件通过引入并在 mixin:\[\] 中注册即可(mixin里的参数无需用 '')

3.3.1 局部混入

school.vue

vue 复制代码
<template>
    <div>
        <div>{{like}}</div>
    </div>
</template>
<script>
    import {data_mixin} from '@/mixin';
    export default{
        name: 'school',
        data() {
            return {
            }
        },
        mixins: [data_mixin]
        ,
        methods: {
        },
        mounted() {
            
        },
    }
</script>

App.vue

vue 复制代码
<template>
  <div id="app">
    <school />
  </div>
</template>
<script>
import school from './components/school.vue';
export default {
  name: 'App',
  components: {
    school
  },
  methods: {
  },
  mounted() {
  }
}
</script>

mixin.js

js 复制代码
export const data_mixin = {
    data() {
        return {
            like: 'basketball',
        }
    }
}
3.3.2 全局混入

在 main.js 中引入并全局注册后,所有组件都会持有该混入

main.js

vue 复制代码
import { data_mixin } from '@/mixin.js';
Vue.mixin(data_mixin);
3.4 插件

一定以 install(Vue) 为函数名,里面可以有全局过滤器、全局指令、全局混入等等

plungins.js

js 复制代码
export default {
    //一定要以 install(Vue) 作为函数名
    install(Vue) {
        //里面配置的东西都是全局的
        Vue.filter('slice', function (value) {
            return '213';
        })
    }
}

main.js

js 复制代码
import plungins from './plungins';
Vue.use(plungins)
3.5 Storage

LocalStorage : 存在客户端电脑

SessionStorage: 一次会话

setItem('key', 'value')
getItem('key')
removeItem('key')
clear()
3.6 自定义事件
3.6.1 $emit

用于 子 -> 父 通信, 在子组件上使用 自定义事件 @XXX= "YYYY" ,再通过在子组件中 this.$emit.('YYYY', 参数1, 参数2...) 触发事件,即可实现 子 -> 父的通信

school.vue

vue 复制代码
<script>
    export default{
        name: 'school',
        data() {
            return {
                schoolName: '实验学校',
            }
        },
        methods: {

        },
        mounted() {
            //调用父亲的getSchoolName
            this.$emit('getSchoolName', this.schoolName)
        },
    }
</script>

App.vue

vue 复制代码
<template>
  <div id="app">
      <!-- 自定义事件getSchoolName -->
    <school @getSchoolName="getSchoolName" />
  </div>
</template>
<script>
import school from './components/school.vue';

export default {
  name: 'App',
  components: {
    school,
  },
  methods: {
    getSchoolName(name) {
      console.log(name);
    }
  },
  mounted() {
  }
}
</script>

<style>
</style>
3.6.2 解绑 $off

通过在子组件中 this.$off('YYYY') 解绑

相关推荐
小宋加油啊1 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
Xzh04232 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
做cv的小昊2 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
星恒随风2 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
鹤鸣的日常4 小时前
前端运行时动态环境变量方案
前端·react.js·docker·前端框架·vue·gitlab
sensen_kiss4 小时前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.8 软件测试 (Software Testing)(上)
学习·软件工程
力学与人工智能4 小时前
PPT分享 | 洛桑联邦理工学院魏震:深度几何学习在工业设计优化中的应用
学习·优化·工业设计·深度几何学习·洛桑联邦理工学院
sensen_kiss6 小时前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.9 软件测试 (Software Testing)(下)
学习·软件工程
wu_ye_m6 小时前
学习c语言第35天 函数声明和定义
c语言·开发语言·学习
清辞8536 小时前
Coze从入门到实战---第一、二章
大数据·人工智能·学习·语言模型