← 返回首页
Vue-cli3基础教程(七)
发表时间:2020-12-16 21:44:01
vue组件基本结构

一个vue组件主要包括3个部分:界面展示代码template、业务实现代码script、界面布局代码style。

<template>
  <div class="class_1">
    <h2>{{msg}}</h2>
    这是HelloWorld Vue组件
  </div>
</template>

<script>
  export default {
    name: 'HelloWorld',
    data () {
      return {
        msg: 'Welcome to Your Vue.js App'
      }
    }
  }
</script>

<style scoped>
  .class_1{
    color: lightcoral;
  }
</style>

组件中的script标签中编写methods、watch、各种生命周期函数。

<template>
    <div class="class_1">
        <h2>{{msg}}</h2>
        这是HelloWorld Vue组件
    </div>
</template>

<script>
    export default {
        name: 'HelloWorld',
        data() {
            return {
                msg: 'Welcome to Your Vue.js App'
            }
        },
        methods: {
            // 组件的方法
        },
        watch: {
            //watch监听方法,擅长处理的场景:一个数据影响多个数据
            //watch是去监听一个值的变化,然后执行相对应的函数。
        },
        computed: {
            //computed擅长处理的场景:一个数据受多个数据影响
            //computed是计算属性,也就是依赖其它的属性计算所得出最后的值
        },

        beforeCreate() {
            //在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
            console.log('beforeCreate()...');
        },
        created() {
            /*(在实例创建完成后被立即调用。实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data
            observer),属性和方法的运算,watch / event事件回调。然而,挂载阶段还没开始,$el属性目前不可见。初始化数据请求写这里*/
            console.log('created()...');
        },

        beforeMount() {
            // 在挂载开始之前被调用:相关的 render 函数首次被调用。
            console.log('beforeMount()');
        },
        mounted() {//页面初始化方法

            /* 编译好的HTML挂载到页面完成后执行的事件钩子
            初始化数据除非有依赖dom的放在mounted()
            里面,加个nextTick, el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
            此钩子函数中一般会做一些ajax请求获取数据进行数据初始化*/
            console.log("HelloWorld Vue is done");
        },

        beforeUpdate() {

            /* 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。
            你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
            只有更新和模板发生关联的数据才会触发这个钩子
            和模板绑定的数据更新之前*/
            console.log('beforeUpdate()...');
        },

        updated() {

            /* 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
            当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。
            然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
            该钩子在服务器端渲染期间不被调用。*/
            console.log('updated()...');
        },

        beforeDestroy() {
            // 实例销毁之前调用。在这一步,实例仍然完全可用。一般用于清除定时器
            //$once来监听定时器,在beforeDestroy钩子可以被清除。
            this.$once('hook:beforeDestroy', () => {
                clearInterval(timer);
            })

        },
        destroyed() {
            /* Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,
            所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。*/
            console.log('destroyed()...');
        }
    }
</script>

<style scoped>
    .class_1 {
        color: lightcoral;
    }
</style>