Vue 子组件与父组件通信 简单实例及解析

1.效果:

点击按钮实现加减

2.代码及解析

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>组件通信</title>
    <script src="node_modules/vue/dist/vue.js"></script>
</head>
<body>
<!--子组件向父组件通信。目标:在子组件中点击对应按钮实现父组件中属性数据的改变-->
<div id="app">
    <h2> num ={{num}} </h2>
    <counter :snum="num" @add="numAdd" @dec="numDec"></counter>
</div>

<script type="text/javascript">
    /*定义一个子组件
    * 2、子组件中应该定义一个data或者计算属性(computed)来修改属性的值
    * 但是,我们不希望使用这种方法,这种方法是改变自身的数据,
    * 我们希望改变父组件的数据,上述方法行不通。
    * 3、通过在父组件中定义方法,
    * 此方法能被子组件调用,来实现数据的修改
    * 4、怎样实现在子组件调用父组件的方法?
    *   (1)首先,父组件有方法。numAdd()
    *   (2)在视图层组件模板中绑定事件(父组件的方法)。@add="numAdd"
    *   (3)在子组件中绑定事件(调用自身的方法,来调用父组件的方法)。@click="incrNum"
    *   (4)子组件创建方法,这些方法调用父组件。incrNum()
    *       @emit()可以出发,可以触发当前实例定义的属性
    *
    * 总结:1、流程:
    *       (1)点击+/-(子组件模板中定义的+/-按钮),
    *       (2)触发子组件模板中定义的方法,
    *       (3)触发子组件methods中定义的方法,
    *       (4)触发子组件创建的实例中定义的方法,
    *       (5)触发父组件methods中的方法,
    *
    * */
    const counter={
        template:`
<!--/*vue中不允许模板出现多个根元素*/-->
          <div>
          <button @click="incrNum">+</button>
          <button @click="decrNum">-</button></div>`,
        props:["snum"],
        methods:{
            incrNum(){
                return this.$emit("add");
            },
            decrNum(){
                return this.$emit("dec");
            },
        }
    };

    /*父组件*/
    var app = new Vue({
        el: "#app",
        components:{
            counter:counter
        },
        data: {
            num: 1
        },
        methods:{
            numAdd(){this.num++},
            numDec(){this.num--},
        }
    })
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. assets和public的区别是:assets目录是用于存放需要webpack打包的静态资源,如图片、字体等,而public目录是用于存放不需要webpack打包的静态资源,如favicon.ico、robots.txt等。 2. Vue的性能优化有以下几个方面:使用v-if代替v-show、使用v-for时加上key、避免在模板使用复杂表达式、使用异步组件、使用keep-alive缓存组件等。 3. SPA(Single Page Application)是指整个应用只有一个面,通过动态加载数据和更新DOM来实现面的切换。其优点是用户体验好,缺点是首屏加载时间长,SEO不友好。 4. Vue的生命周期分为8个阶段:创建前、创建、创建后、挂载前、挂载后、更新前、更新后、销毁前。 5. 在一个包含组件组件从创建到销毁的过程Vue的生命周期执行顺序是:组件创建前、组件创建前、组件创建后、组件创建后、组件挂载前、组件挂载前、组件挂载后、组件挂载后、组件更新前、组件更新前、组件更新后、组件更新后、组件销毁前、组件销毁前、组件销毁后、组件销毁后。 6. 组件通信的方式有:props、$emit、$parent/$children、$refs、event bus、vuex等。 7. $route是当前路由信息对象,包含了当前路由的路径、参数、查询参数等信息;$router是路由实例,包含了路由的跳转方法、路由的钩函数等。 8. 前端路由是指通过改变URL来实现面的切换,而不是通过服务器返回不同的HTML面。它的优点是用户体验好,缺点是不利于SEO。 9. Vuex是一个状态管理库,它的原理是将应用的状态集存储在一个store,通过mutations、actions、getters等方法来修改和获取状态。 10. Vue3.0的更新包括:Composition API、Teleport、Fragments、Suspense等。 11. Vue 3.0Vue Composition API风格是一种新的组件编写方式,它将组件的逻辑拆分成多个函数,使得代码更加清晰、易于维护。与Option API相比,Composition API更加灵活,可以更好地组织代码。 12. 虚拟DOM是一种将真实DOM抽象成JavaScript对象的技术,通过比较新旧虚拟DOM来实现面的高效更新。 13. 虚拟DOM的解析过程包括:将模板解析成AST(抽象语法树)、将AST转换成虚拟DOM、将虚拟DOM渲染成真实DOM。 14. 使用虚拟DOM的好处是可以减少DOM操作,提高面的性能。 15. Vuekey的作用是为了在列表渲染时,能够正确地识别每个节点的身份,从而避免出现错误的更新。 16. 不建议使用index作为key的原因是,当列表的元素发生变化时,如果使用index作为key,可能会导致错误的更新,从而影响面的性能和正确性。 17. Vue-router跳转和location.href的区别是,前者是通过路由实例来进行跳转,可以实现前端路由的切换,而后者是通过改变URL来进行面的切换,会重新向服务器请求HTML面。 18. router跳转传参时,params是通过URL路径传递参数,query是通过URL查询参数传递参数。 19. Vue-router导航守卫包括:全局前置守卫、全局后置钩、路由独享的守卫、组件内的守卫。它们可以用来控制路由的跳转,实现权限控制等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值