传统方式编写应用
组件方式编写应用
组件:就是实现应用中局部功能代码和资源的整合
1、什么是非单文件组件:一个文件中包含n个组件
一个文件只包含一个组件,单文件组件都是.vue结尾的
第一步:定义组件
第二步:注册组件
第三步:使用组件
Title
备注:
1、组件名写法
一个单词组成
第一种写法:首字母小写如student
第二种写法:首字母大写Student
多个单词组成
第一种写法:kebab-case命名如my-student 注册的时候要用引号
第二种写法:CamelCase命名如MyStudent,需要vue脚手架支持
2、一个简写方式
const student = Vue.extend(options) 简写 const student = options
上面案例简写
const student = { /*自定义组件时,不要用el属性, 因为最终所有的组件都是被vm管理,由vm决定要挂载到哪个容器*/ //使用template可以配置组件结构 template:`{{name}} {{age}}`, /*data要写成普通函数形式,不能写成对象形式,因为一个组件被多个地方使用,任何一个地方修改了data对象,其他地方也会发生变化*/ data(){ return{ name:'张三', age:20 } } }
获取dom元素或者组件实列对象vc
结果
同一个组件传入不同数据展示不同界面
定义一个展示学生信息的组件(模板),传入数据展示不同的学生信息
{{msg}}
{{name}}
{{age}}
调用
说明
1、props不允许修改的,如上面的student页面修改age值,控制台有错误提示,若业务有需要可以在student中的data中定义一个属性,将props的复制即可
{{msg}}
{{name}}
//这里是data中的值{{myAge}}
2、有些值不能传比如key ref等这些是不允许传入的
把多个组件共用的配置提取成一个混入(mixin)对象
定义一个js文件 文件名自定义 内容
export const hunru1 = { data(){ return{ x:200 } }, methods:{ showNum(){ alert("111") } }, mounted() { console.log("minin钩子函数") } }; export const hunru2 = { data(){ return{ xx:400 } } }
{{name}}
{{age}}
{{x}}
{{xx}}
再main.js中使用
import Vue from 'vue' import App from './App.vue' import {hunru1, hunru2} from "./mixin"; //项目中所有的vc 和vm引入 Vue.mixin(hunru2) Vue.mixin(hunru1) Vue.config.productionTip = false new Vue({ render: h => h(App), }).$mount('#app')
混入中定义data和methods中属性或者和方法在原组件中的重复了 则以原组件为准,但是如果钩子重复了则都会执行 先执行原组件的再执行混入的
让样式局部生效 防止全局冲突
通过给当前组件根元素加一个data-v,然后结合选择器实现
说明
方式:通过props
方式:自定义emit事件
第一种方式:全局事件总线
1、安装全局事件总线
new Vue({ render: h => h(App), beforeCreate() { Vue.prototype.$bus = this } }).$mount('#app')
2、使用事件总线
在要接受数据的组件中给bus绑定自定义事件,事件的回调留在组件自身
mounted(){ this.$bus.on('hello',mydata) }
提供数据
this.$bus.$emit('hello',mydata)
最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件
this.$bus.$off('hello')
第二种方式:消息订阅与发布
localstorage和sessionStorage统称webStorage
1、特定
浏览器关闭 存储的数据不会消失,只有以下两种情况会消失
引导用户操作了localstorage的clear()或者removeItem()
用户清空了浏览器缓存
2、相关api
/*存储相关*/ //存储相同的key会替换 localStorage.setItem("name","dddd") localStorage.setItem("name","dddd1") //数值类型存储会转成字符串 localStorage.setItem("age",19) //只要value给的不是string 会转成string,即调用的tostring 所以下面存储的[object,object] localStorage.setItem("person",person) //可以通过json.stringify()将对象转成字符串存储 localStorage.setItem("person1",JSON.stringify(person)) /*读取*/ console.log(localStorage.getItem("name")) console.log(localStorage.getItem("age")) console.log(localStorage.getItem("person1")) //读没有存储的数据 返回的是null,JSON.parse(xxx)也返回null console.log(localStorage.getItem("xx")) //读取对象字符串并转成对象 console.log(JSON.parse(localStorage.getItem("person1"))) /*删除*/ //删除指定的key localStorage.removeItem("person") //清空 localStorage.clear();
1、会话存储,浏览器一关闭 sessionStorage存储的数据消失
2、所有的api和localStorage一样