vue.js之数据传递和数据分发slot

一、组件间的数据传递

  1.父组件获取子组件的数据  

    *子组件把自己的数据,发送到父级

    *vm.$emit(事件名,数据);

    *v-on: @

  示例用法:当点击send按钮的时候,“111”变成“我是子组件的数据”

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>父级获取子级的数据</title>
    <script src="bower_components/vue/dist/vue.js"></script>
    <style>
    </style>
</head>
<body>
<div id="box">
    <aaa>
    </aaa>
</div>

<template id="aaa">
    <span>我是父级 -> {{msg}}</span>
    //自动调用get方法,@child-msg和下面的this.$emit(‘child-msg‘,this.a)相对应
    <bbb @child-msg="get"></bbb>
</template>
<template id="bbb">
    <h3>子组件-</h3>
    <input type="button" value="send" @click="send">
</template>
<script>
    var vm=new Vue({
        el:‘#box‘,
        data:{
            a:‘aaa‘
        },
        components:{
            ‘aaa‘:{
                data:function(){
                    return {
                        msg:111,
                        msg2:‘我是父组件的数据‘
                    }
                },
                template:‘#aaa‘,
                methods:{
                    //这里的msg实际上就是子组件传递给父组件的数据
                    get:function(msg){
                        this.msg=msg;
                    }
                },
                components:{
                    ‘bbb‘:{
                        data:function(){
                            return {
                                a:‘我是子组件的数据‘
                            }
                        },
                        template:‘#bbb‘,
                        methods:{
                            send:function(){
                                this.$emit(‘child-msg‘,this.a);
                            }
                        }
                    }
                }
            }
        }
    });
</script>
</body>
</html>

  2、子组件获取父组件的数据

     在调用子组件:
        <bbb :m="数据"></bbb>

     子组件之内:
        props:[‘m‘,‘myMsg‘]

        props:{
        ‘m‘:String,
        ‘myMsg‘:Number
        }

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自己获取父级的数据</title>
    <script src="bower_components/vue/dist/vue.js"></script>
    <style>
    </style>
</head>
<body>
<div id="box">
    <div>{{a}}</div>
    <aaa>
        {{msg}}
    </aaa>
</div>

<template id="aa">
    <h1>11111</h1>
    <bbb :mmm="msg2" :my-msg="msg"></bbb>
</template>
<script>
    var vm=new Vue({
        el:‘#box‘,
        data:{
            a:‘a‘
        },
        components:{
            ‘aaa‘:{
                data:function(){
                    return {
                        msg:111,
                        msg2:‘我是父组件的数据‘
                    }
                },
                template:‘#aa‘,
                components:{
                    ‘bbb‘:{
                        props:{
                            ‘mmm‘:String,
                            ‘myMsg‘:Number
                        },
                        template:‘<h3>我是bbb组件->{{mmm}} <br> {{myMsg}}</h3>‘
                    }
                }
            }
        }
    });

</script>
</body>
</html>

运行结果:

      

二、内容分发:

  Vue.js提供了一种混合父组件内容与子组件自己模版的方式:slot,用来占一个位置

  1、基本用法 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>slot保留原来的位置</title>
    <script src="bower_components/vue/dist/vue.js"></script>
    <style>
    </style>

</head>
<body>
<div id="box">
    <aaa>
        <ul>
            <li>1111</li>
            <li>2222</li>
            <li>3333</li>
        </ul>
    </aaa>
    <hr>
    <aaa>
    </aaa>
</div>
<template id="aaa">
    <h1>xxxx</h1>
    <slot>这是默认的情况</slot>
    <p>welcome vue</p>
</template>

<script>
    var vm=new Vue({
        el:‘#box‘,
        data:{
            a:‘aaa‘
        },
        components:{
            ‘aaa‘:{
                template:‘#aaa‘
            }
        }
    });

</script>
</body>
</html>

  运行结果:ul标签里面的内容没有被覆盖,如果不使用slot,ul标签里的内容将会被覆盖

        

  2、slot的name属性 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>slot中name属性的使用</title>
    <script src="bower_components/vue/dist/vue.js"></script>
    <style>
    </style>
</head>
<body>
<div id="box">
    <aaa>
        <ul slot="ul-slot">    //这里slot的名字要与下面slot中name属性相对应
            <li>1111</li>
            <li>2222</li>
            <li>3333</li>
        </ul>
        <ol slot="ol-slot">    //用法同上
            <li>111</li>
            <li>222</li>
            <li>333</li>
        </ol>
    </aaa>
    <hr>
    <aaa>
    </aaa>
</div>
<template id="aaa">  
    <h1>xxxx</h1>
    <slot name="ol-slot">这是默认的情况</slot>      //设置name属性,给slot命名
    <p>welcome vue</p>
    <slot name="ul-slot">这是默认的情况2</slot>
</template>

<script>
    var vm=new Vue({
        el:‘#box‘,
        data:{
            a:‘aaa‘
        },
        components:{
            ‘aaa‘:{
                template:‘#aaa‘
            }
        }
    });

</script>
</body>
</html>

运行结果:

      

原文地址:https://www.cnblogs.com/15fj/p/8320467.html

时间: 2024-08-06 14:32:35

vue.js之数据传递和数据分发slot的相关文章

vue.js 组件之间如何实现数据传递?

组件是 vue.js  最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.如何传递数据也成了组件的重要知识点之一.本文和大家分享的就是vue.js  组件之间传递数据相关内容,一起来看看吧,希望对大家 学习vue.js有所帮助. 组件 组件与组件之间,还存在着不同的关系.父子关系与兄弟关系(不是父子的都暂称为兄弟吧). 父子组件 父子关系即是组件 A  在它的模板中使用了组件  B ,那么组件  A  就是父组件,组件  B  就是子组件. //  注册

vue.js 组件之间传递数据

组件是 vue.js  最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.如何传递数据也成了组件的重要知识点之一.本文就这个知识点和大家一起来扒一扒,希望对大家 学习vue.js有所帮助. 组件 组件与组件之间,还存在着不同的关系.父子关系与兄弟关系(不是父子的都暂称为兄弟吧). 父子组件 父子关系即是组件 A  在它的模板中使用了组件  B ,那么组件  A  就是父组件,组件  B  就是子组件. //  注册一个子组件 Vue.component(

简单的vue.js的表单提交数据至flask然后数据库入库,再将表里面的数据展示在网页

一.先在数据库中创建表格 在mysql中建users库并建立一个含有ID,username,email三个字段的user表 二.去vue的组件里面写页面的表单代码,注意form标签里的action需要暂时先空着,等flask的代码写完后填入flask的链接地址 然后将这个vue.js需要在index.js里面配置 三.用python实现连接数据库,获取表单数据并入库 四,将写入到数据库表格的内容写入到网页中,在网页展示 别忘了在vue的form标签的action属性加入flask的地址  效果展

Vue.js线程机制问题还是数据双向绑定有延迟的问题

最近用select2做一个下拉多选,若只是从后端获取一个列表渲染还好说,没有任何问题.但要用select2对数据初始化时进行selected的默认选项进行显示,就出现问题了. vm.$set('areas', data.data); areaIdsSelect2(); areaIdsSelect2Change(); 区域没有显示出默认的selected.此时做一个定时器, vm.$set('areas', data.data); setTimeout(function () { areaIdsS

vue教程3-05 vue组件数据传递、父子组件数据获取

vue教程3-05 vue组件数据传递 一.vue默认情况下,子组件也没法访问父组件数据 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="bower_components/vue/dist/vue.js"><

ASP.NET MVC 之控制器与视图之间的数据传递

今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, 如何在控制器中获取,处理这些数据. ASP.NET MVC 中所有控制器都继承Controller类,而Controller又继承自ControllerBase,而ControllerBase下又包含ViewData以及TempData视图数据字典. 一,使用ViewData传递数据 ViewDat

总结ASP.NET MVC视图页使用jQuery传递异步数据的几种方式

在ASP.NET MVC的视图页向控制器传递异步数据,可能是数组,JavaScript对象,json,表单数据,等等. 关于数据,JavaScript对象有时候和json长得一模一样,有么有? var person = {Name: 'darren', Age: 21};以上是一个JavaScript对象.不过也可以这样表示: var person = {"Name":"darren","Age":21};以上JavaScript对象的另外一种表

从零开始学习Vue.js,学习笔记

一.为什么学习vue.js methods 只有纯粹的数据逻辑,而不是去处理 DOM 事件细节. vue.js兼具angular.js和react的优点,并且剔除了他们的缺点 官网:http://cn.vuejs.org/ 手册:http://cn.vuejs.org/v2/api/ 二.vue.js是什么 Vue是一个"MVVM框架(库)",和angular类似,相比angular小巧,比较容易上手 Vue是一个构建用户界面点的渐进式框架,与其他重量级框架不同的是,vue采用自底向上

青出于蓝而胜于蓝 — Vue.js对Angular.js的那些进步

Angular.js与Vue.js是非常有渊源的两款前端框架,据Vue.js的官方网站描述,在其早期开发时,灵感来源就是Angular.js.而在很多方面,Vue.js也正像是中国的那句古话,"青出于蓝而胜于蓝".今天,K就从下面几个方面来跟大家一起探讨一下,Vue.js到底在哪些方面更"胜于蓝". (一)简单的操作 这是K看来Vue.js最杰出的的方法,Vue.js致力于视图层的展现,这使它在与其他项目进行整合的时候会变得非常easy,这也使它更容易"嵌