9月20日 vue基础课程(vue2)14-26

vue基础课程(vue2)14-26

14. 什么是组件

  1. 组件:就是把一个比较大的网页,进行功能模块的拆分;就是vue的一个自定义标签
  2. 组件的父子关系和兄弟关系
  3. 组件的操作
    src/App.vue 首页
    src/assets 静态资源
    src/mian.js 入口js文件
    src/components 放入组件
  • 组件的首字母要大写
  1. 父组件(App.vue)引入子组件
<template>
    <div>
		<Header></Header>
   	 	<Swiper></Swiper>
   		<Icons></Icons>
    </div>
</template>
<script>
	import Header from './components/home/Header'
	import Swiper from './components/home/Swiper'
	import Icons from './components/home/Icons'
	export default {
		components:{
			  Header,
			  Swiper,
			  Icons
		}
	}
</script>

15. 父组件传值给子组件

16. 子组件传值给父组件

17. 兄弟组件之间的传值

18. 总结组件的传值

  • 面试题:组件的传值【vue的高频面试题】
  1. 父组件 传值给 子组件
    父组件:绑定
    <Swiper :xxx='parentStr' :num='num'></Swiper>
    ***xxx是一个名称=‘这里是属性值’
    子组件:props接

     写法1:
     	export default{
     		props:['xxx','num'],
     	}
     写法2:
     	export default{
     		props:{
     			xxx:String,
     			num:Number
     		}
     	}
    
  2. 子组件 传值给 父组件 (自定义事件)
    子组件:(定义自定义事件)
    this.$emit('changeEvent',this.str);
    参数1:自定义事件
    参数2:是传递的数据
    父组件:

	<Child @changeEvent='fn'></Child>
	
	methods:{
	  	fn( val ){  ===>这里的val,就是子组件传的数据
	  		this.changeStr = val;
	  	}
	}
  1. 兄弟组件 之间的 传值 ( bus )
    两组件中引入bus.js
    bus.js中
    import Vue from 'vue'
    export default new Vue;
    A兄弟:emit传
    bus.$emit('changeStr',this.aStr);
    参数1:自定义事件
    参数2:是传递的数据(值)
    B兄弟:on接
	bus.$on("changeStr",(res)=>{
		console.log( res );
	})

19. scoped(样式局部化)以及原理

  1. 组件内样式局部化:
    <style scoped></style>
    *** 基本上项目中scoped是必加的
  2. scoped原理
    加入了scoped,就会在节点上添加自定义属性(data-v-xxx)
    css选择器 ==> 根据属性选择最终添加样式

20. slot(插槽)使用及场景

<slot></slot>

21. Vue插件的使用

使用插件

  1. 下载
    npm install vue-awesome-swiper -S
    ***下载最新版
    npm install vue-awesome-swiper@3.1.3 -S
    ***下载指定版
  2. 引入
    全局引入 在 main.js
import VueAwesomeSwiper from 'vue-awesome-swiper'
import 'swiper/dist/css/swiper.css'
Vue.use(VueAwesomeSwiper)

按需引入 [局部引入方式:单个组件引入]

import 'swiper/dist/css/swiper.css'
import { swiper, swiperSlide } from 'vue-awesome-swiper'

export default {
components: {
  swiper,
  swiperSlide
}
  1. 配置
    相关文档

22. 样式穿透

使用场景:引用插件时修改样式不成功
样式穿透:通用(非常建议使用)
::v-deep 通用(非常建议使用)
stylus >>>
sass和less /deep/

23. Vue生命周期

  • 面试题:vue的生命周期 、生命周期钩子 【高频】
  1. 是什么?
    vue中每一个组件都是独立的,每一个组件都有自己的生命周期,从一个组件创建、数据初始化、挂载、更新、销毁

  2. 有哪些?

     beforeCreate
     created     《有数据》
    
     beforeMount
     mounted    《有dtemplate节点》
    
     beforeUpdate
     updated       《改变数据》
    
     beforeDestroy
     destroyed      《组件关闭》
    
  3. 打开一个组件,会执行哪些生命周期

     beforeCreate
     created
     beforeMount
     mounted
    

24. axios(插件,引入接口)和代理配置

  1. vue项目axios进行接口的请求
    1>下载
    npm install axios -S
    2> main.js引入

     	import axios from 'axios'
     	Vue.prototype.axios = axios;
    

    3> 使用

     GET
    
     	this.axios({
     		url:,
     		params:{}
     	}).then(res=>{
     		res
     	})
     POST
     	this.axios({
     		url:,
     		data:{}
     	}).then(res=>{
     		res
     	})
    
  2. vue项目中在开发阶段设置代理

    1> 项目根目录需要新建vue.config.js

    2> 配置代理

     module.exports = {
       devServer: {
         proxy: {
           '/api': {
             target: 'http://localhost:3000',
             changeOrigin: true
           }
         }
       }
     }
    

    3> 配置完成一定要重启前端

  3. 安装后端
    1> 全局安装 cnpm install express-generator -g
    2> 创建项目 express --view=ejs <项目名称>
    express --view=ejs server
    3> 进入项目文件,安装依赖,启动项目
    cd server
    npm install
    npm start
    4> 后端接口
    server / routes / index.js

	router.get('/api/home',function(req,res,next){
	console.log( req.query.str );
	//后端如何给前端数据
	res.send({  //==>res.json
		a:1
	})
})
router.post('/api/list',function(req,res,next){
	console.log( req.body.str );
	//后端如何给前端数据
	res.send({  //==>res.json
		a:1
	})
})

25. 双向绑定原理

数据双向绑定的原理
数据双向绑定在vue中的使用是v-model,它的原理是使用了Object.defineProperty()方法,用这个方法去观测或者劫持对象的某个属性是设置了还是获取了,通过它就可以劫持到,比如说v-model绑定了,它就会走set部分,进行赋值。

Object.defineProperty(对象,'属性',{
   //设置劫持
	set(){
	},
	//获取劫持
	get(){
	}
})

26. Object.freeze性能优化

Object.freeze做Vue项目的性能优化
Object.freeze() 方法用于冻结对象,禁止对于该对象的属性进行修改(由于数组本质也是对象,因此该方法可以对数组使用)

 async created(){
    let res = await axios({
      url:'http://39.101.217.150:8075/classplan/list',
      params:{
        page:1,
        size:3
      }
    })
    this.list = Object.freeze(res.data.data.records);
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值