VUE笔记

VUE组件使用

props 和 $emit

props:子组件接收父组件传递的参数
$emit:子组件向父组件触发一个事件

组件间通讯 - 自定义事件

创建一个js文件,此文件只用于生成一个vue实例并export出去,在组件中引入后使用vue中自带的$emit和$on实现自定义事件的触发和监听,在组件销毁时需及时解绑自定义事件,否则可能会造成内存泄漏。(Vue3已移除此方法,可改用eventemitter3第三方插件实现)

组件生命周期

挂载阶段、更新阶段、销毁阶段
父子组件间生命周期执行顺序一般为从外到内再从内到外
例:父created > 子created > 子mounted > 父mounted


VUE高级特性

自定义v-model

一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value attribute 用于不同的目的。model 选项可以用来避免这样的冲突:

Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    <input
      type="checkbox"
      v-bind:checked="checked"
      v-on:change="$emit('change', $event.target.checked)"
    >
  `
})

现在在这个组件上使用 v-model 的时候:

<base-checkbox v-model="lovingVue"></base-checkbox>

这里的 lovingVue 的值将会传入这个名为 checked 的 prop。同时当 触发一个 change 事件并附带一个新的值的时候,这个 lovingVue 的 property 将会被更新。
注意你仍然需要在组件的 props 选项里声明 checked 这个 prop。

$nextTick

页面更新完成后的执行的回调

slot

基本使用…
作用域插槽:父组件访问子组件中的数据,当使用多个相同子组件的时候,插槽内容可根据子组件中的数据进行动态展示
具名插槽:子组件中有多个插槽时可设置name属性准确找到对应插槽进行渲染

动态、异步组件

动态组件:<component :is=“component-name”></component>
异步组件:按需加载组件,可大大优化页面加载性能

export default {
    name: "Demo",
    components: {
        HelloWorld: () => import('./HelloWorld')
    }
}

keep-alive

缓存组件,提升页面性能

mixin

组件中相同的逻辑可抽离出来,使用mixin混合到组件中。
缺点:变量来源不明确,不利于阅读;多mixin可能会造成变量冲突;mixin和组件可能出现多对多的关系,复杂度较高。


VUEX

VUE笔记

基本概念

state、getters、action、mutation

基本使用

dispatch、commit、mapState、mapGetters、mapActions、mapMutation


VUE-ROUTER

路由模式

hash(默认), 例:http://aaa.com/#/b/123
H5 history(需server端支持),例:http://aaa.com/b/123

路由配置

动态路由

const User = {
    // 获取动态路由中的参数
    template: '<div>User {{$route.params.id}}</div>'
}
const router = new Router({
    routes: [
        // 动态路由参数,以冒号开头。能命中 '/user/1'、'/user/2' 等格式的路由
        {path: '/user/:id', component: User}
    ]
})

懒加载

const router = new Router({
    routes: [
    	{
    		path: '/',
    		// 当加载到该路由地址时才会加载次组件
    		component: () => import('./../components/Main')
    	},
        {
    		path: '/user',
    		component: () => import('./../components/User')
    	},
    ]
})
上一篇:Nav2初次尝试


下一篇:[tf1] 保存和加载参数