总要有人来改变世界的,为什么不能是你呢

vue.js(四)

由于组件内容太多又特别关键,我决定在官网教程的基础上,加上自己的理解,针对每个内容详细记录一下

 1.注册组件

①全局注册

//首先创建组件
Vue.component('blog-post', {
            props: ['post'],
            template: `
            <div class="blog-post">
                <h3>{{ post.title }}</h3>
                <button v-on:click="$emit('enlarge-text')">
                    Enlarge text
                </button>
                <div v-html="post.content"></div>
            </div>
            `
        })
//然后创建Vue实例
new Vue({
            el: '#app1',
            data: {
                msg:'aaa' ,
                msg1:'bbb'
            }
        })

这样,就能在任意标签内部使用该组件了,但是数据还是根据Vue实例绑定的数据来的

注意:全局注册组件的话,必须先创建组件再创建Vue实例

②局部注册

//创建组件,声明变量
     var componentA ={
            props: ['value'],
            template: `
            <div class="custom">
                <input
                v-bind:value="value"
                v-on:input="$emit('input', $event.target.value)"
                >
                <button >{{value}}</button>
            </div>
            `
        }
//创建Vue实例
        new Vue({
            el: '#app3',
            data: {
                msg:'aaa',
                msg1:'bbb'
            },
            components: {
                'component-a':componentA
            }
        })

前台调用:

<div id="app3">
        <component-a v-model="msg"></component-a>
</div>

关于组件绑定v-model的用法详解,请参照这篇博客 https://www.cnblogs.com/eco-just/p/9136732.html 的第四点。

2.数据传递之Prop

其实在上篇已经提到过prop了,但是可能说得不太明了,这里采用画图的形式再说明一次,也为了加深自己的理解

 

我想这张图已经很好地表达了数据传递的过程。

但是,单击改变count值的时候控制台会报这种错:

[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "count"

found in

---> <ButtonCounter>
       <Root>

因为这里组件的数据来源于外部父组件(parent component)并且单击事件企图更改其值,这也就是文档中提到的:

当然,vue也是给出了解决方案,那就是组件中定义的data属性:

这样的话,单击事件改变变量的值是被允许的,因为此时组件操纵的数据是属于组件自己的了,并且组件复用的时候,组件之间是不会相互影响的。

下面讲组件数据传递的一个特例:双向数据绑定

我们都知道,vue中v-model实现了双向数据绑定,name在组件中,v-model是这样用的:

值得注意的是,在组件中使用v-model时,v-model绑定的值默认是通过props中的value传递的,他不像之前的单向数据

绑定(v-bind:count="b"时,props通过count传递数据)

可能你也注意到了,上面讲到v-model绑定的值默认是通过value变量传递(这个value可以代表传递过来的任何值),那么

如何自定义绑定的值呢?

这里的vb就相当于之前的value。

另外,由于是双向数据绑定,子组件改变了变量值,会及时反映到父组件中去,如果其他地方也用到了父组件的该变量,那么

将会得到及时更新。

附:props的数据验证(了解就好)

3.自定义事件

我想这张图已经很好地展示了自定义事件调用的过程(之前应该有提到过)。那么怎么通过v-model来调用函数呢

 

posted @ 2018-06-29 12:55  桔子桑  阅读(417)  评论(0编辑  收藏  举报