赞
踩
1、组件中data属性
组件对象也有一个data属性,只是这个data属性必须是一个函数,而且这个函数返回一个对象,对象内部保存着数据
原因:在于vue让每个组件对象都返回一个新的对象,因为如果是同一个对象,组件在多次使用会相互影响,写在函数中为局部变量,调用data中的值时,都会新创一个内存空间,调用者指向这个空间的值这样组件间就不会相互影响
2、父向子传递数据
通过props向子组件传递数据
<!-- 父组件 -->
<cpn :cInfo='info'></cpn>
export default{
data:{
info: 10
}
}
<!-- 子组件 -->
<div>{{cInfo}}</div>
export default{
props:{
cInfo: {
type: Number,
// type 为Object或数组时为函数 default(){ return [] }
default: 0
}
}
}
3、子向父组件通信
通过事件向父组件发送消息,需要自定义事件来完成
在子组件中通过$emit()来触发事件
在父组件中 通过v-on来监听子组件事件
<!-- 子组件 -->
export default{
methods: {
click() {
this.$emit('itemClick'[,item])
}
}
}
<!-- 父组件 -->
<cpn @itemClick="cpnClick"></cpn>
export default{
methods: {
cpnClick([item]) {
...
}
}
}
4、父子组件的访问方式
父组件访问子组件:使用$refs
<!-- 子组件 -->
<div>{{currentIndex}}</div>
export default {
data() {
return {
currentIndex: 0
}
}
}
<!-- 父组件 -->
<cpn ref="cpn"></cpn>
export default{
//将父组件的 index 值传递给子组件的 currentInex
click(index) {
this.$refs.cpn.currentIndex = index
},
}
1、URL的hash
锚点,本质上是改变window.location的href属性,我们可以直接赋值location.href来改变hash,但页面不刷新HTML5的 history模式
history.pushState(data, title, targetURL) -----栈结构
history.replaceState(data, title, targetURL) ------没有回退
传给目标路由的信息,可为空
目前所有浏览器都不支持,填空字符串即可
目标url,不会检查url是否存在,且不能跨域。如不传该项,即给当前url添加data
history.back()==history.go(-1) ------回退一步
history.forward()==history.go(1) -----进一步
2、VUE-router
2.1 vue中默认的是URL的hash,在router的实例中配置mode:‘history’
<router-link to="跳转属性" tag="元素">
,渲染<router-view>
2.2 传递参数 params和query
params: 动态路由:$router.params.id == path: ‘/user/:id’ 可获取路径中的id值,传递后的路径 ‘/user/123’
函数中使用:this.$router.push(’/user’+this.userId)
query:配置路由时普通配置 ‘/user’, 传递方式:query对象中的key,value作为传递,路径:/user?id=123
函数中使用:this.$router.push( {path:’/user’,query: {key:value} })
2.3 $router和$route的区别
2.4 导航守卫
vue-router提供的导航守卫主要用来监听路由的进入和离开的
vue-router 提供了beforEach 和 afterEach 两个钩子函数,它们会在路由的即将进入 和 离开之前触发
to:即将进入的目标的路由对象
from:当前导航即将离开的路由对象
next: 调用该方法后,才能进入下一个钩子
router.beforEach((to ,from, next) => {
})
router.afterEach((to, from) => {
})
2.5 keep-alive
vue中内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染
<keep-alive>
<router-view/>
</keep-alive>
activated()和deactivated() 是keep-alive的两个函数
vuex是专门为vue.js应用程序开发的状态管理模式,它采用了集中式存储管理 应用的所有组件的状态,并以相应的规则状态以一种可预测的方式发生变化
状态管理: 多个组件共享的变量全部存储在一个对象里面,vuex就是为了提供这样一个在多个组件间共享状态的插件
概念图
vuex核心概念
mutations:{
事件名: (state, index) => {
state.index = index
}
},
methods:{
shijian() {
this.$store.commit('事件名',index)
}
}
actions:{
事件名: (context) => {
context.commit('事件')
}
},
methods:{
shijian() {
this.$store.dispatch('事件名')
}
}
getters:{
id: state => {
return ...
}
}
axios的功能特点
axios 请求方式 – axios(config)
axios({url: '',
params: {
id: 1,
page:10
}
}).then(res => {
...
})
发送并发请求 – 使用axios.all可以放入多个请求的数组,axios.all([])返回的结果是一个数组,使用axios.spread可就数组分开
axios.all([axios.get('url'),
axios.get('url',{params:{id:1,page:10}})
]).then(axios.spread(function (allresult1, allresult2) {
debugger//打印可以拿到所有的返回值
allresult1== 第一个请求的返回值
allresult2== 第二个请求的返回值
}));
全局配置
axios.default.baseURL = 'http:/localhost:8080'
axios.default.timeout = 5000 //超时时间(毫秒)
常见的配置选项:
get请求时 传参为params
post请求时 传参为data
axios的实例
const instance = axios.create({})
封装
export function request(config){ const instance = axios.create({ baseURL = 'http:/localhost:8080', timeout = 5000 }) // 2.axios的拦截器 // 2.1.请求拦截的作用 instance.interceptors.request.use(config => { return config }, err => { // console.log(err); }) // 2.2.响应拦截 instance.interceptors.response.use(res => { return res.data }, err => { console.log(err); }) // 3.发送真正的网络请求 return instance(config) }
Vue.cli3的目录结构
常用的几个钩子函数
数组函数 - - Vue是响应式的,数据变化时,Vue会自动检测数组的变化,视图对应的更新
push() - - - 数组后追加(可以追加多个),并返回新的长度
pop() - - - 最后一个删除,并且返回删除元素的值(数组为空时,不改变数组,并返回undefined)
shift() - - - 第一个元素删除,返回数组的第一个元素
unshift() - - - 数组前添加(可以追加多个),返回新的长度
sort() - - - 排序
reverse() - - - 反转
splice() - - -
-删除:传递一个参数(index) 删除对应及之后的数据,传递第二个参数(你要删除的个数)
-替换:第二个参数,表示我们替换几个元素,后面参数为用于替换的元素
-插入:第二个参数传入0,后面参数为插入的元素
split() - - - 将一个字符串以参数分割 ,返回数组
join() - - - 将数组转化为一个字符串,一传入的字符串参数分割,返回字符串
…Array - - - 数组里的每一项拆分下来
fillter() - - - 参数为回调函数,必须返回一个boolean值,返回为true时,函数会自动将这次回调的n加到新数组中,false时,函数会过滤这次的n
map() - - - 返回的值时处理后的值
reduce - - - 对数组中所有的内容进行汇总,后一个参数为开始值
const nums = [10, 20, 111, 222, 4444, 40, 50]
let total = nums.fillter(n = > return n < 100)
.map(n => return n * 2)
.reduce((preValue, n) => {return preValue + n},0)
const person = { name: "jack", age: 21, language: ['java', 'js', 'css'] } console.log(Object.keys(person));//["name", "age", "language"] console.log(Object.values(person));//["jack", 21, Array(3)] console.log(Object.entries(person));//[Array(2), Array(2), Array(2)] const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; //{a:1,b:2,c:3} Object.assign(target, source1, source2); console.log(target);//["name", "age", "language"] //3)、对象的函数属性简写 let person3 = { name: "jack", // 以前: eat: function (food) { console.log(this.name + "在吃" + food); }, //箭头函数this不能使用,对象.属性 eat2: food => console.log(person3.name + "在吃" + food), eat3(food) { console.log(this.name + "在吃" + food); } } person3.eat("香蕉"); person3.eat2("苹果") person3.eat3("橘子"); //4)、对象拓展运算符 // 1、拷贝对象(深拷贝) let p1 = { name: "Amy", age: 15 } let someone = { ...p1 } console.log(someone) //{name: "Amy", age: 15} // 2、合并对象 let age1 = { age: 15 } let name1 = { name: "Amy" } let p2 = {name:"zhangsan"} p2 = { ...age1, ...name1 } console.log(p2)
以上仅为个人学习笔记总结,请大佬指点(^_^)。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。