Vue全局API(下)

组件

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

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

全局组件:

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

//定义全局组件
Vue.component('nav-bar', {
    template: "
我是子组件
" }) new Vue({ el: "#app", data: { title: "全局组件" } })

局部组件

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

{{ title }}

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

父子组件之间的传值

Vue全局API(下)_第1张图片

父传子通过props属性

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

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

{{ title }}

//定义组件
var navBar = {
    template: "
我来自{{ address }}
", //接受父组件传递过来的值 props: ['address'] } new Vue({ el: "#app", data: { title: '父组件向子组件传值' }, components: { navBar } })

属性中带‘—’的情况

比如:

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

var navBar = {
    template: "
我叫{{ myName }}
", props: ['myName'] } new Vue({ el: "#app", components: { navBar } })

有坑,尽量少用或不用!

动态的props

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

在父组件中绑定message属性

var navBar = {
    template: "
你好啊怎么说:{{message}}
", props:['message'] } new Vue({ el: "#app", data: { message: '雷猴啊' }, components: { navBar } })
Vue全局API(下)_第2张图片

字面量



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



子传父

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

父组件中通过v-on接收

{{ title }}

{{ count }}

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

//定义子组件
var navBar = {
        template: "
我是子组件
{{ num }}
", //这里是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 } } })
Vue全局API(下)_第3张图片

component标签

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

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

2、定义三个组件

var componentA = {
    template: "
这是组件A
" } var componentB = { template: "
这是组件B
" } var componentC = { template: "
这是组件C
" } 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(下))