[Vue] 03 - Components

组件示范

一、创建game-item标记

组件的属性是:game,那么该属性必然要在自定义标记中去定义。

  

二、运行效果

该组件的作用就是:配合 list 打印出列表数据。

 

 

组件化

一、主模板

  • 代码

v-home,v-news的组件定义在其他文件中,这里只是组装下。 

<template>
  <div id="app">
      <v-home></v-home>
      <hr >
      <br>
      <v-news></v-news>
  </div>
</template>


<script>
  /*
  1、引入组件
  2、挂载组件
  3、在模板中使用
  */
   import Home from './components/Home.vue';
   import News from './components/News.vue';

   export default {
      data () {
        return {
         msg:'你好vue'
        }
      },
      components:{   /*前面的组件名称不能和html标签一样*/
        'v-home':Home,
        'v-news':News
      }
    }
</script>

<style lang="scss">
</style>

 

  • UI 架构

 

二、组件实现

  • home组件 中包含 header子组件

<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="home">

            <v-header></v-header>
            <br>
            <hr>
            <h2>这是一个首页组件--{{msg}}</h2>

            <button @click="run()">执行run方法</button>
    </div>
</template>

<script>
    //引入头部组件
    import Header from './Header.vue';
    export default{

        data(){
            return {
                msg:'我是一个首页组件msg'
            }
        },
        methods:{
            run(){
                alert(this.msg);
            }
        },
        components:{
            'v-header':Header
        }
    }
</script>

<style lang="scss" scoped>

    /*css  局部作用域  scoped*/
    h2{
        color:red
    }
</style>

 

  • 基本子组件:header

未引用其他组件。

<template>
    <div>
        <h2 class="header">这是一个头部组件</h2>
    </div>
</template>

<script>
    export default {
        data(){
            return{
                msg:'这是一个头部组件'
            }
        }
    };
</script>

<style lang="scss">

.header{
    background:#000;
    color:#fff;
}
</style>

 

  • News组件 中包含 header子组件

引用了上述 Header基本子组件。

<template>
    <div>
        <v-header></v-header>
        <h2>这是一个新闻组件</h2>

        <ul>
            <li >
                    111111
            </li>
            <li>
              2222
            </li>
            <li>
              333333
            </li>
        </ul>
    </div>
</template>


<script>
  //引入头部组件
   import Header from './Header.vue';

    export default {
        data(){
            return{
                msg:'我是一个新闻组件'
            }
        },components:{
            'v-header':Header
        }
    };
</script>

<style lang="scss">
</style>

 

 

生命周期

一、调用子组件

点击button 卸载life组件,再创建life组件。

以下是日志。 

实例销毁之前
实例销毁完成
实例刚刚被创建1
实例已经创建完成2
模板编译之前3
模板编译完成4 

子组件的实现:

<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="home">

            <v-header></v-header>
            <br>
            <hr>

            <v-life v-if="flag"></v-life>    <!-- v-if=false组件卸载 -->

             <br>
              <br>
               <br>

            <button @click="flag=!flag">挂载以及卸载life组件</button>
    </div>
</template>


<script>
    //引入头部组件
    import Header from './Header.vue';
    import Life from './Lify.vue';

    export default{

        data(){
            return {
                msg:'我是一个首页组件msg',
                flag:true
            }
        },
        methods:{
            run(){
                alert(this.msg);
            }
        },
        components:{
            'v-header':Header,
            'v-life':Life
        }
    }
</script>

<style lang="scss" scoped>
    /*css  局部作用域  scoped*/
    h2{
        color:red
    }
</style>

 

二、子组件监控自我状态

<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="life">
          生命周期函数的演示    ---{{msg}}
        <br>
          <button @click="setMsg()">执行方法改变msg</button>
    </div>
</template>


<script>
    /*
        生命周期函数/生命周期钩子:
        组件挂载、以及组件更新、组件销毁、的时候触发的一系列的方法  这些方法就叫做生命周期函数
    */
    export default{

        data(){
            return{
                msg:'msg'
            }
        },
        methods:{
            setMsg(){
                this.msg="我是改变后的数据"
            }
        },

        beforeCreate(){
            console.log('实例刚刚被创建1');
        },
        created(){
            console.log('实例已经创建完成2');
        },
        beforeMount(){
            console.log('模板编译之前3');
        },
        mounted(){     /*请求数据,操作dom , 放在这个里面  mounted*/
            console.log('模板编译完成4');
        },
        beforeUpdate(){
            console.log('数据更新之前');
        },
        updated(){
            console.log('数据更新完毕');
        },
        beforeDestroy(){   /*页面销毁的时候要保存一些数据,就可以监听这个销毁的生命周期函数*/
            console.log('实例销毁之前');
        },
        destroyed(){
            console.log('实例销毁完成');
        }
    }
</script>

  

Ref: https://cn.vuejs.org/v2/guide/instance.html#%E5%AE%9E%E4%BE%8B%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E9%92%A9%E5%AD%90

 

End.

posted @ 2020-08-13 22:31  郝壹贰叁  阅读(231)  评论(0编辑  收藏  举报