IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue 04 生命周期 组件化 -> 正文阅读

[JavaScript知识库]Vue 04 生命周期 组件化

引出生命周期

此时调用change,定时器回调修改opacity,数据修改,模板重新解析,再次调用change。

挂载流程

更新流程

销毁流程

解绑(自定义)事件监听器

生命周期

生命周期总结

 <div id="root">
        <!-- <h2 :style="{opacity}">hello,{{name}}</h2> -->
        <h2 :style="{opacity:opacity}">hello,{{name}}</h2>
        <button @click="stop">click stop</button>
        <button @click="opacity = 1">opacity 1</button>
       


    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;

        new Vue({
            el: "#root",
            data: {
                name: "atguigu",
                opacity: 1,
              

            },
            methods: {
                stop(){
                    this.$destroy();
                }
            },
            beforeDestroy() {
                clearInterval(this.timer);
            },

            //vue完成模板解析,并把初始的真实的dom元素放入页面后(挂载完毕),会调用该函数。
            mounted() {
                this.timer = setInterval(() => {
                    this.opacity -= 0.01;
                    if (this.opacity <= 0) { this.opacity = 1 }
                }, 16);
            },
            
        });


     
    </script>

?组件化

template:

整个root容器当作模板

?

会直接替换掉root,把template当作模板进行解析。?

?

?非单文件组件

data需要用函数式写法

?

<div id="root">
        <h2>{{msg}}</h2>
       <!--组件标签-->
       <school>
       </school>

       <hr>

       <student>       
       </student>

       <student>   
       </student>

       <hello>
       </hello>
      
    </div>

    <div id="root2">

    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;


        //创建school组件
       const school = Vue.extend({

            template:`
            <div>
                <h2>schoolname:{{schoolname}}</h2>
                 <h2>schoolage{{schoolage}}</h2>
                 <button @click='show'>点击提示</button>
            </div>
            `,
            data(){
                return{
                    schoolname: "atguigu",
                    schoolage:20,
                }
            },
            methods: {
                show(){
                    alert(this.schoolname);
                }
            },
       });
       //创建stu组件
       const student = Vue.extend({
        template:`
            <div>
                <h2>stuname:{{stuname}}</h2>
                <h2>stuage{{stuage}}</h2>
            </div>
            `,
            data(){
                return{
                    stuname:'tom',
                    stuage:18,
                }
            },
       });
       //创建hello组件
       const hello = Vue.extend({
            template:`
            <div>
                <h2>stuname:{{stuname}}</h2>
                <h2>stuage{{stuage}}</h2>
            </div>
            `,
            data(){
                return{
                    stuname:'tom',
                    stuage:18,
                }
            },
       });


       //全局注册组件
       Vue.component('hello',hello);

        new Vue({
            el: "#root",
            data:{
                msg:'this is msg'
            },
            //局部注册组件
            components:{
                school:school,
                student,
            }
           
        });





     
    </script>

?组件的几个注意点


?组件的嵌套

?

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script type="text/javascript" src="../js/vue.js"></script>
    <title>Document</title>

</head>


<body>
    <div id="root">
   
      
    </div>

    
    <script type="text/javascript">
        Vue.config.productionTip = false;

        //创建student组件
        const student = Vue.extend({
            template:`
            <div>
                <h2>stuname:{{stuname}}</h2>
                <h2>stuage{{stuage}}</h2>
            </div>
            `,
            data(){
                return{
                    stuname:'tom',
                    stuage:18,
                }
            },
            
       });
       
        //创建school组件
       const school = Vue.extend({
            template:`
            <div>
                <h2>schoolname:{{schoolname}}</h2>
                 <h2>schoolage{{schoolage}}</h2>
                 <button @click='show'>点击提示</button>
                 <student></student>
            </div>
            `,
            data(){
                return{
                    schoolname: "atguigu",
                    schoolage:20,
                }
            },
            methods: {
                show(){
                    alert(this.schoolname);
                }
            }, 
            components:{
                student:student,               
            }  
       });
      
       //创建hello组件
       const hello = Vue.extend({
            template:`
            <div>
                <h2>{{msg}}</h2>
                
            </div>
            `,
            data(){
                return{
                    msg:'hello!'
                }
            },
       });


       const app = Vue.extend({
           template:`
                <div>
                    <hello></hello>

                    <school></school>
                </div>
           `,
           components:{
                school,
                hello,              
            } 


       })


       //vue
        new Vue({
            template:'<app></app>',
            el: "#root",
            //局部注册组件
            components:{
                app,             
            }         
        });


    </script>

</body>

</html>

?VueComponent

每次调用extend,都返回了一个VueComponent

?

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script type="text/javascript" src="../js/vue.js"></script>
    <title>Document</title>

</head>


<body>
    <div id="root">

        <!--组件标签-->
        <school>
        </school>

        <hello>
        </hello>



    </div>

    <div id="root2">

    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;


        //创建school组件
        const school = Vue.extend({

            template: `
            <div>
                <h2>schoolname:{{schoolname}}</h2>
                 <h2>schoolage{{schoolage}}</h2>
                 <button @click='show'>点击提示</button>
            </div>
            `,
            data() {
                return {
                    schoolname: "atguigu",
                    schoolage: 20,
                }
            },
            methods: {
                show() {
                    console.log(this)//VueComponent实例对象  vc
                    alert(this.schoolname);
                }
            },
        });


        //创建hello组件
        const hello = Vue.extend({

            template: `
            <div>
                <h2>hello:{{hello}}</h2>
               
            </div>
            `,
            data() {
                return {
                    hello: "hello",
                    
                }
            },
           
        });



        console.log(school);//一个构造函数
        console.log(hello);//一个构造函数
        console.log(school === hello);//false

        new Vue({
            el: "#root",
            data: {

            },
            //局部注册组件
            components: {
                school: school,
                hello:hello,
            }

        });

    </script>

</body>

</html>

?Vue实例与组件实例

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:20:01  更:2022-03-08 22:20:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:37:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码