vue组件 component

转载于:https://www.cnblogs.com/zycbloger/p/6429592.html

1创建组件

1.1.全局组件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!-- <link rel="stylesheet" type="text/css" href="../../css/reset.css"> -->
    <script type="text/javascript" src="../vue/vue.min.js"></script>
    <script type="text/javascript" src="../vue/babel.min.js"></script>

</head>
<body style="padding:30px">
    <div id="box">
       <test-div></test-div>
  </div>
</body>
</html>
<script>
      //注册
        Vue.component('TestDiv', { //不区分大小写,这里写驼峰法
            template: '<div @click="change">{{msg}}</div>',
            data:()=>{return {msg:'我的组件'}},
            methods:{
                change:()=>{
                    console.log(this); //this指向window
                }
            }
        });

        //创建根实例
        var vm = new Vue({
            el:'#box',
        });

</script>

1.2.局部组件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!-- <link rel="stylesheet" type="text/css" href="../../css/reset.css"> -->
    <script type="text/javascript" src="../vue/vue.min.js"></script>
    <script type="text/javascript" src="../vue/babel.min.js"></script>

</head>
<body style="padding:30px">
    <div id="box">
       <test-div></test-div>
  </div>
</body>
</html>
<script>
          ///定义组件
        var testTemplate = {
            template: '<div @click="change">{{msg}}</div>',
            data:function(){
                return {msg:'我的局部组件'}
            },
            methods:{
                change:function(){
                     //todo
                    console.log(this);
                }
            }
        };
        //创建根实例
        var vm = new Vue({
            el:'#box',
            components:{
                'TestDiv': testTemplate
            } 
        });
</script>

还有几个其他的写法

1.3.写在script中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!-- <link rel="stylesheet" type="text/css" href="../../css/reset.css"> -->
    <script type="text/javascript" src="../vue/vue.min.js"></script>
    <script type="text/javascript" src="../vue/babel.min.js"></script>

</head>
<body style="padding:30px">
    <div id="box">
       <test-div></test-div>
  </div>
</body>
</html>
 <script type="text/x-template" id="myComponent">
      <div @click="change">{{msg}}</div>
</script>
<script>
          ///定义组件
        var testTemplate = {
            template: '#myComponent',
            data:function(){
                return {msg:'我的局部组件'}
            },
            methods:{
                change:function(){
                     //todo
                    console.log(this);
                }
            }
        };
        //创建根实例
        var vm = new Vue({
            el:'#box',
            components:{
                'TestDiv': testTemplate
            } 
        });
</script>

1.4.使用template标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!-- <link rel="stylesheet" type="text/css" href="../../css/reset.css"> -->
    <script type="text/javascript" src="../vue/vue.min.js"></script>
    <script type="text/javascript" src="../vue/babel.min.js"></script>

</head>
<body style="padding:30px">
    <div id="box">
       <test-div></test-div>
  </div>

   <template id="myComponent">
             <div @click="change">{{msg}}</div>
   </template>
</body>
</html>
<script>
          ///定义组件
        var testTemplate = {
            template: '#myComponent',
            data:function(){
                return {msg:'我的局部组件'}
            },
            methods:{
                change:function(){
                     //todo
                    console.log(this);
                }
            }
        };
        //创建根实例
        var vm = new Vue({
            el:'#box',
            components:{
                'TestDiv': testTemplate
            } 
        });
</script>

2.使用组件

2.1.使用

<div id="box">
       <test-div></test-div>
       <div is="test-div"></div>
  </div>

2.2.动态使用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!-- <link rel="stylesheet" type="text/css" href="../../css/reset.css"> -->
    <script type="text/javascript" src="../vue/vue.min.js"></script>
    <script type="text/javascript" src="../vue/babel.min.js"></script>
</head>

<body style="padding:30px">
    <div id="box">
        <input type="button" value="1" @click="buttonClick('TestDiv');">
        <input type="button" value="2" @click="buttonClick('TestDiv2')">
        <div :is="myCom"></div>
    </div>
    <template id="myComponent">
        <div @click="change">{{msg}}</div>
    </template>
    <template id="myComponent2">
        <div @click="change">{{msg2}}</div>
    </template>
</body>

</html>
<script>
//定义组件
var testTemplate = {
    template: '#myComponent',
    data(){
        return { msg: '我的局部组件1' }
    },
    methods: {
        change(){
            //todo
            console.log('1111');
        }
    }
};
var testTemplate2 = {
    template: '#myComponent2',
    data(){
        return { msg2: '我的局部组件2' }
    },
    methods: {
        change(){
            //todo
            console.log('2222');
        }
    }
};
//创建根实例
var vm = new Vue({
    el: '#box',
    data(){
        return {
            myCom: 'TestDiv'
        }
    },
    components: {
        'TestDiv': testTemplate,
        'TestDiv2': testTemplate2
    },
    methods: {
        buttonClick(t){
          this.myCom = t;
        }
    }
});
</script>

在用es6语法中,箭头函数中的this始终指向window,我们在vue中使用的是
buttonClick(t){this.myCom = t;}
这种写法,
等同于buttonClick:function(t){this.myCom = t;}
这里this指向 vm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值