vue组件

1. 声明全局组件时,一定要将该全局组建放在 Vue 实例之前。

<script type="text/javascript">

//button-counter组件
Vue.component('button-counter', {

data: function(){
    return {
        counter: 0,
        
    }
},
template: '<button v-on:click="counter++">you clicked {{counter}} 次</button>'

})

//blog-post组件
Vue.component('blog-post',{
    props: ['post'],
    template: '<div><p>标题:{{post.title}} </p><p>正文:{{post.content}}</p></div>'  
});
 
 var vm1 = new Vue({
    el: '#app',
    data: {
        styleObj: {
            color: 'red',
            fontSize: '20px',
            height: '20px',
            width: '50px'
        },
       
    }
   
 });

</script>

2. 自定义组件的 template 属性中,所有的元素必须放在一个根节点中:

Vue.component('blog-post',{
    props: ['post'],
    template: '<div><p>标题:{{post.title}} </p><p>正文:{{post.content}}</p></div>'
              
});

3. 自定义组件中,template 属性中写模板时需注意:   

    首尾的 "单引号" 是 Esc 下面那个键。

    模板中用到 "  $emit()  " 函数时,eg: $emit( ' 事件名 ' ) ;那这这个事件名的写法可以是 " 一个单词 " ," 多个单词,首字母小写,单词之间用  ‘- ’ 或者 ‘_’ 连接 " 

4. 子模板向父组件传值示例:

<div id="app" >        

       <blog-post v-bind:style="{ fontSize: fontSize+'px' }" v-bind:post="post" v-on:update
        _font="open">
        </blog-post>       
 </div>

 

//blog-post组件
Vue.component('blog-post',{
    props: ['post'],
    template: `<div><p>标题:{{post.title}} </p><p>正文:{{post.content}} </p>
                <button v-on:click="$emit('update_font')">放大字体</button>
              </div>`                  
});

var vm1 = new Vue({
    el: '#app',
    data: {        
       
        title: 'sina blog',
        fontSize: 1
    },
    methods: {
        open: function(){
            this.fontSize+=10;
            alert("this.fontSize: "+this.fontSize)
        },
 }  
  • 在子模版的组件中定义需要触发的dom事件,示例中为 v-on:click 的部分,参数解释:

    $emit 的第一个参数为  " 事件名 "(该触发事件绑定的模板事件),也相当于一个事件,可以被父组件监听。

    在调用模板时,v-on:update_font="open" 中的 "  open " 为调用的父组件的函数。其中 update_font 这个组件中的事件名命名方式残参考 "  3 " 。  

  •     子组件修改父组件相关属性:
<div id="app" >        

        <button-counter v-bind:style="{ fontSize: size+'px' }" v-on:reduce_size="reduce"> 
        </button-counter>
</div>
Vue.component('button-counter', {

template: `
            <div>
               <span>测试缩小字体</span>
               <button v-on:click="$emit('reduce_size',1)">缩小字体</button>
            </div>
            `
});

var vm1 = new Vue({
        el: '#app',     
        title: 'sina blog',
        size: 20
    },
    methods: {
        
        reduce: function(reduceNum){
            this.size-=reduceNum;
            console.log("size: "+this.size)
        },
)}

在子组件的模板中传递两个参数,第二个参数可直接被父组件的函数接收,在该示例中 " reduceNum " 接收该值,参数可任意命名。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值