Vue2中的各种自定义组件

复制到页面看下效果。
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <!-- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vue"></script> -->
        <script src="https://unpkg.com/vue"></script>
        <!-- <script type="text/javascript" src="js/vue.js"></script> -->
        <!-- <script type="text/javascript" src="js/vue.min.js"></script> -->
        <link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
        <style type="text/css">
            .red{color: #f00;}
        </style>
    </head>
    <body>
        
        <div id="app1">
            <h2>模板测试1</h2>
            <v-header></v-header> 
        </div>
        <script type="text/javascript">
            Vue.component("vHeader",{//标签中必须要将驼峰法拆开写。写成<vHeader></vHeader>就不会有效果
                template: "<div>这里面是模板1的内容。</div>"
            });
            var app1 = new Vue({
                el:"#app1"
            });
        </script>
        <hr>   
        <div id="app2">
            <h2>模板测试2</h2>
            <!-- 创建一个 to-item 组件的实例 -->
            <to-item></to-item>
        </div>
        <div id="app22">
            <h2>模板测试2-----</h2>
            <!-- 创建一个 to-item 组件的实例 可以多次调用 但必须实例化-->
            <to-item></to-item>
        </div>
        <script type="text/javascript">
            Vue.component("to-item",{   //"to-item"写成"toItem"驼峰写法也行。但调用模板的时候不能用驼峰。
                template: "<strong class='red'>这里是模板2内容的。</strong>"
            });
             //定义模板后,必须实例化,不然是不显示的,找不到Vue中的模板方法。
            var app2 = new Vue({
                el: "#app2"
            }); 
            var app22 = new Vue({
                el: "#app22"
            });
        </script>
        <hr>   
        <div id="app3">
            <h2>这里是模板测试3</h2>
            <ul>
                <other-item v-for="todo in list" :item = "todo" :key="todo.id" :id="todo.id"></other-item>
            </ul>
        </div>
        <script type="text/javascript">
            Vue.component("other-item",{
                props: ["item"],
                template: "<li>{{item.title}}</li>"
            });
            var app3 = new Vue({
                el: "#app3",
                data:{
                    list:[
                        {id: 0,title: "文本1"},
                        {id: 1,title: "文本2"},
                        {id: 2,title: "文本3"}
                    ]
                }
            });
        </script>
        <hr />
        <div id="app4">
            <h2>全局模板4</h2>
            <global-component></global-component><!-- 使用自定义标签在 Vue.js 模板中插入组件,编译时,这部分内容会被替换为组件的内容 -->
        </div>
        <div id="app5">
            <h2>全局模板4-------在全局组件定义之后调用</h2>
            <!-- 这里也插入了这个组件,全局注册的组件可以在所有晚于该组件注册语句构造的 Vue 实例中使用 -->
            <global-component></global-component>
        </div>
        <template id="global-template"> <!-- 这个模板里面只能有一个跟目录 --><!-- 此 DOM 元素的 innerHTML 作为全局注册组件的模板 -->
            <div>
                <h4>这里面是全局定义的组件模板内容</h4>
                <div>{{msg}}</div><!-- 和普通 Vue.js 模板一样,可以进行插值 -->
                <input type="text" v-model="msg" /><!-- 和普通 Vue.js 模板一样,也可以进行表单数据绑定 -->
            </div>
        </template>
        <script type="text/javascript">
            Vue.component("global-component",{
            // Vue.component("globalComponent",{ //globalComponent驼峰写法也行,但引用的时候不行。  使用语法糖(只使用扩展实例选项)全局注册组件
                data: function(){   //Vue 扩展实例构造器的 data 选项,必须是一个工厂函数,返回数据对象
                    return {
                        msg: "输入内容看看会有什么变化。"
                    }
                },
                template: "#global-template"
                //template 是模板,可以是包含 HTML 代码的字符串,也可以是 # + id,如果是 # + id,则会使用该选择子匹配的 DOM 元素的 innerHTML 作为模板
            });
            //在定义模板之后实例化,才有效
            var app4 = new Vue({
                el: "#app4"
            });
            var app5 = new Vue({
                el: "#app5"
            });
        </script>
        <hr />
        <div id="d">
            <div>1</div>
            <v-h></v-h>
        </div>
        <div id="dd">
            <div>2</div>
            <v-h></v-h>
        </div>
        <template id="tem">
            <div>
                <i>11</i>
                {{msg}}
                <input type="text" v-model="msg" />
            </div>
        </template>
        <script type="text/javascript">
            Vue.component("vH",{
                data: function(){
                    return {
                        msg: "hello word."
                    }
                },
                template: "#tem"
                // template: "<h6>888</h6>"
            })
            new Vue({
                el: "#d"
            });
            new Vue({
                el: "#dd"
            });
        </script>
        <hr />
        
    </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值