zoukankan      html  css  js  c++  java
  • vue----组件传值方式

    组件之间传值方式
    父组件        子组件        非父子组件
     
    1.父------->儿子(注意:父不能向孙子传递)
     
     
    2.儿子--------->3.非父子传递(兄弟间,叔侄间)
    1.父传子
     
    传递方:
    当子组件在父组件中当标签使用时,给子组件标签添加一个自定义属性,值为需要传递的值   :属性名=“值”(值为父组件data中的属性)
    即:
    <子组件标签 :属性名1="值" :属性名2:"值"></子组件标签>
     
    接收方:
    在 子组件内部,通过props接收,   并在子组件页面中进行渲染  {{属性名}}即接收到的值
    props接收的有两种方式
     
        1.数组形式的接收props:["属性名1""属性名2"]
     
        2.对象形式的接收(可保证接收数据类型的严谨性)
                export default{
                        props:{
                                    属性名1:String,
                                    属性名2:Number
                                }
            }
    子组件中:
    //渲染
    <template>
        <div>
            <p>接收到父组件的值为:{{属性名1}}----{{属性名2}}</p>
        </div>
    </template>
    //接收
    <script>
    exprot default{
        props:["属性名1","属性名2"]
    }
    </script>
     
     
     
    2.子传父
     
    app.vue
        给(在父组件中使用的)子组件定义一个自定义方法,子组件通过调用父组件的方法进行传值
     
     
    <子组件标签 @自定义事件名="自定义方法"></子组件标签>
    <one-com :val="city" :val2="message" @handleData="getval"></one-com>
    //父组件接收值
    methods:{
        getval(val){
        // 接收子组件传来的值
            this.son = val;
        }
    }
     
    son.vue
        通过this.$emit()触发事件以及事件对应的方法,并传值
    ,,,自定义的方法不需要加()
     
    子组件传值:(一般子组件中会通过出发事件传值)
    methods:{
        handleSend(){
            // 触发事件(同时触发事件对应的方法),并向方法传值(子组件中的值)
            this.$emit("handleData",this.sonMessage);
        }
    },
     
    总结:
    在父组件中
            给子组件标签自定义事件,以及事件对应的方法
            在methods中,用该方法进行接收子组件传来的值,并将值放入data对应的属性中
     
    在子组件中(一般要有一个事件来触发$emit())
            通过$emit()出发事件,并向函数传值,传得值就是子组件data中的值
            
     
     
     -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    非父子传值
     
    1.在main.js中设置公共的对象
    Vue.prototype.observe = new Vue()
    因为每个组件都是一个对象,如果我们需要对事件进行监听,必须用同一个$on,和$emit,因此在组件内部用属于自己的$on,$emit是无效的,所以,我们建立了一个公共的vue对象
     
    事件为自己定义的,传值方和接收值方的事件必须一致
    传值方:(触发事件,并传值)
        this.observer.$emit(事件,值)
     
    接收值方:(绑定事件,并接收值)参2为事件对应的函数
        this.observer.$on(“事件”,(值)=>{}) 
     
    必须在created(){}中进行接收,因为在created钩子函数中,可以访问到属性和方法,而我们要将接收到的值放入data的某个属性中,所以,要在created中进行绑定事件,并接收值
     
    created(){
        //接收方,绑定事件,接收值val
        this.observer.$on("change",(val)=>{
            this.other = val;
        })
     
    }
     
     
     
     
    用途:
     
    列表页和详情页中的购物车
        购物车(不同位置的数量,价格都是对应的)
     
    地理位置
     
     
     
     删除修改案例总结
     
    1.
    one组件
        点击添加
            将输入框中的值(对象 )传到two组件
    two组件
        接收one组件传来的值(对象),将对象push到数组中,并在页面中渲染
     
    2.
    two组件
        点击修改(获取当前修改的index)
            获取数组中index对应的对象,将对象给one组件
    one组件
        接收two组件传来的对象,并修改data中的值
     
    3.
    one组件
        点击修改
        获取当前输入框的值,给two组件
    two组件
        接收传来的值,并修改数组中index对应的对象的值
     
     
     
        
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Ubuntu Linux 开发者笔记本
    jQuery – 随机排列 item
    MemberwiseClone 关于 string 浅拷贝的一个误解
    在Mac OS X中配置Apache + PHP + MySQL
    ASP.NET MVC 3和Razor中的@helper 语法
    textpattern 在 nginx 上的 rewrite 规则
    错误:无法将带[]的索引应用于ConnectionStringsCollection类型的表达式
    F# 3.0新特性简介
    开发中状态到底用数字还是字符串
    将网站中用户上传的零散小文件存储在MongoDB中的.net解决方案
  • 原文地址:https://www.cnblogs.com/SRH151219/p/10395611.html
Copyright © 2011-2022 走看看