美文网首页
Vue全局API(下)

Vue全局API(下)

作者: 一蓑烟雨任平生_cui | 来源:发表于2017-06-27 18:15 被阅读0次

组件

什么是组件?我所理解的组件,是和视图相关的,比如一个页面,可以分成多个模块,那么每一个模块就可以看成是一个组件,当然了,每个组件中有各自的功能。

组件分为全局组件和局部组件。

全局组件:

全局组件是在构造器外部定义的

<div id="app">
    <nav-bar></nav-bar>
</div>
//定义全局组件
Vue.component('nav-bar', {
    template: "<div>我是子组件</div>"
})

new Vue({
    el: "#app",
    data: {
        title: "全局组件"
    }
})

局部组件

局部注册的组件,只能在局部作用域中注册使用,其他作用域没用。

<div id="app">
    <h2>{{ title }}</h2>
    <nav-bar></nav-bar>
</div>
new Vue({
    el: "#app",
    data: {
        title: "局部组件"
    },//注册局部组件components是加‘s’的
    components: {
        'nav-bar':{
            template: "<div>这是局部组件</div>"
        } 
    }
})

父子组件之间的传值

父传子通过props属性

组件的作用域是独立的,我们不能够在子组建中直接使用父组件中的值。要使用父组件的值,需要通过props属性传递数据。

在父组件中自定义一个属性,并将要传递的值赋值给该属性(相当于一个载体),在子组件中通过props接受,数组中就是相应的‘载体’

<div id="app">
    <h1>{{ title }}</h1>
    <nav-bar address="China"></nav-bar>
</div>
//定义组件
var navBar = {
    template: "<div>我来自{{ address }}</div>",
    //接受父组件传递过来的值
    props: ['address']
}

new Vue({
    el: "#app",
    data: {
        title: '父组件向子组件传值'
    },
    components: {
        navBar
    }
})

属性中带‘—’的情况

比如:

<div id="app">
    <nav-bar my-name="cuiliang"></nav-bar>
</div>

在子组件中通过props接受的时候,需要转换成驼峰式命名。

var navBar = {
    template: "<div>我叫{{ myName }}</div>",
    props: ['myName']
}

new Vue({
    el: "#app",
    components: {
        navBar
    }
})

有坑,尽量少用或不用!

动态的props

在子组件中接收父组件动态的数据,需要用v-bind绑定,当父组件的值变化时,子组件相应的跟着变化。

在父组件中绑定message属性

<div id="app">
    <input v-model = 'message'>
    <nav-bar v-bind:message = 'message'></nav-bar>
</div>
var navBar = {
    template: "<div>你好啊怎么说:{{message}}</div>",
    props:['message']
}

new Vue({
    el: "#app",
    data: {
        message: '雷猴啊'
    },
    components: {
        navBar
    }
})

字面量

<!-- 传递了一个字符串 "1" -->
<nav-bar count="1"></nav-bar>

因为它是一个字面 prop ,值是字符串 "1" 而不是number。如果想传递一个实际的number,需要使用 v-bind ,从而让它的值被当作 JavaScript 表达式计算:

<!-- 传递了一个字符串 "1" -->
<nav-bar :count="1"></nav-bar>

子传父

父组件通过props传值,那子组件怎么传给父,使用自定义事件。

父组件中通过v-on接收

<div id="app">
    <h2>{{ title }}</h2>
    <div>{{ count }}</div>
    <hr>
    <!--count自定义事件接收-->
    <nav-bar v-on:getnum='result'></nav-bar>
</div>

子组件中通过$emit发射事件

//定义子组件
var navBar = {
        template: "<div>我是子组件<div>{{ num }}</div><button @click = 'add'>add</button></div>",
        //这里是data函数
        data(){
            return{
                num: 0
            }  
        },
        methods: {
            add(){
                this.num ++
                this.$emit('getnum', this.num)//参数2是传递的值
            }
        }
    }

    new Vue({
        el: "#app", 
        data: {
            title: "子组件向父组件传值",
            count: 0
        },
        components: {
            navBar
        },
        methods: {
            //参数是传递过来的值
            result(val){
                this.count = val
            }
        }
    })

component标签

<component></component>是vue框架自定义的标签,作用就是让我们可以根据不同的状态选择不同的组件。

1、在模板中的component标签中绑定一个‘is’属性,通过点击按钮改变select属性的值,进而选择不同的组件。

<div id ="#app">
    <component :is = 'select'></component>
    <button @click = 'changeComponent'>点击改变组件</button> 
</div>

2、定义三个组件

var componentA = {
    template: "<div>这是组件A</div>"
}
var componentB = {
    template: "<div>这是组件B</div>"
}
var componentC = {
    template: "<div>这是组件C</div>"
}

new Vue({
    el: "#app",
    data: {
        select: componentA
    },
    methods: {
        changeComponent(){
            let select = this.select;
            if(select==componentA){
                select = componentB
            } else if (select == componentB){
                select = componentC
            } else {
                select = componentA
            }
        }
    },//注册组件
    components: {
        componentA, 
        componentB,
        componentC
    }
})

相关文章

  • Vue全局API(下)

    组件 什么是组件?我所理解的组件,是和视图相关的,比如一个页面,可以分成多个模块,那么每一个模块就可以看成是一个组...

  • vue学习(68)vue3中的其他改变

    全局API的转移 Vue 2.x 有许多全局 API 和配置例如:注册全局组件、注册全局指令等。 Vue3.0中对...

  • 2018-06-28 Vue源码解析阅读笔记

    Vue的全局API 里面定义了Vue的全局变量,比如Vue.init()、Vue.component()注册全局组...

  • Vue源码探究-全局API

    Vue源码探究-全局API 本篇代码位于vue/src/core/global-api/ Vue暴露了一些全局AP...

  • API

    全局 API Vue.extend

  • 20200816

    Vue全局API汇总 全局配置 Vue.config 是全局配置对象。 silent 默认false,是否取消Vu...

  • 无标题文章

    --- type: api --- ## 全局配置 `Vue.config` 是一个对象,包含 Vue 的全局配置...

  • VUE api等

    全局 api Vue.nextTick Vue.set( target, propertyName/index, ...

  • (第二季)Vue2.0-全局API

    全局API介绍 全局API并不在构造器里,而是先声明全局变量或者直接在Vue上定义一些新功能,Vue内置了一些全局...

  • (一)Vue.directive指令(自定义指令)

    本节知识点 全局api Vue.directive指令 自定义指令的生命周期 全局api概述 全局api并不在构造...

网友评论

      本文标题:Vue全局API(下)

      本文链接:https://www.haomeiwen.com/subject/opwecxtx.html