微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vue常用的API

一 vm对象的生命周期

每个vm对象在创建时都要经过一系列的初始化过程。在这个过程中Vue.js会自动运行一些叫做生命周期的的钩子函数,我们可以使用这些函数,在对象创建的不同时间阶段加上我们需要的自动执行代码,就实现特定的功能

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>

</head>
<body>
    <div id="app">
        <p ref="p1">{{message}}</p>
        <input type="text" v-model="message">
    </div>
    <script>
        var vm = Vue.createApp({
          data(){
            return {
                message: "hello",
            }
          },
          beforeCreate(){
            // 当前函数执行时,vm还没有初始化完成。
            console.log("beforeCreate>>>", this.$data);
            console.log("beforeCreate>>>", this.$el);
            console.log("beforeCreate>>>", this.$refs);
          },
          created(){
            // 当前函数执行时,vm对象已经初始化完成
            console.log("created>>> $data=", this.$data);  // 此时data选项中的数据已经被注入到vm对象中
            console.log("created>>> $el=", this.$el);
            console.log("created>>> $refs=", this.$refs);
            // 在开发中,我们可以在这函数中进行初始化数据相关的操作,例如:使用ajax从服务器中读取数据,并赋值给data
          },
          beforeMount(){
            // 已经把对应的vue语法的变量替换成了html内容了,但是并没有挂载到el标签内容中
            console.log("beforeMount>>> $el=", this.$el);
            console.log("beforeMount>>> template=", this.$options.template);
            console.log("beforeMount>>> $refs=", this.$refs);
          },
          mounted(){
            // vue生成的HTML内容已经挂载到了$el属性中
            console.log("mounted>>>", this.$el);
            console.log("mounted>>>", this.$refs);
          },
          beforeUpdate(){
            // 变量更新前,data选项中的数据发生了改变,但是没有重新生成虚拟DOM,所以HTML中的变量值没有被同步
            console.log("beforeUpdate>>>", this.$data);
            console.log("beforeUpdate>>>", this.$el.parentElement.innerHTML);
            // 修改数据前,判断本次修改是否合法?发送ajax,
          },
          updated(){
            // 变量更新后,html内容已经与data选项中的数据同步了,因为重新生成了虚拟DOM
            console.log("updated>>>", this.$el.parentElement.innerHTML);
            // 修改数据后,发送ajax,同步数据库
          }
        }).mount("#app")
    </script>
</body>
</html>
vm对象生命周期的钩子函数

说明

在vue使用的过程中,如果要初始化操作,把初始化操作的代码放在 mounted 中执行。
mounted阶段就是在vm对象已经把data数据实现到页面以后。一般页面初始化使用。例如,用户访问页面加载成功以后,就要执行的ajax请求。
另一个就是created,这个阶段就是在 vue对象创建以后,把ajax请求后端数据的代码放进 created 

二 过滤器【Vue3.0已淘汰过滤器选项】

Vue3.0已经被淘汰了过滤器这个选项,所以以下使用2.6.11版本来完成代码的编写。

过滤器,是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中。定义过滤器的方式有两种:全局过滤器和局部过滤器。

2.1 使用Vue.filter进行全局定义

./assets/filter.js

// 定义一个全局过滤器,定义在vm对象的外部,提供给整个项目都可以调用。
// Vue.filter("过滤器函数名", 匿名函数);
Vue.filter("money", (data)=>{
    return `${data.toFixed(2)}元`
})

2.2 在vm对象中通过filters选项api来局部定义

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
    <script src="./assets/vue@2.7.8.js"></script>
    <script src="./assets/filter.js"></script>
</head>
<body>
    <div id="app">
        <p>{{price|money}}</p>
        <p>{{price|mon}}</p>
        <p>{{money_format(price)}}</p>
    </div>
    <script>
        var vm = new Vue({  // 相当于vue3.x的 Vue.createApp()
          el: "#app",  // 相当于vue3.x的mount绑定视图方法
          data(){
            return {
                // message: "hello, vue2.x",
                price: 3.55555
            }
          },
          methods: {
            money_format(data){ // 过滤器完全可以被methods选项中定义的函数所代替,所以在vue3.x以后成为了废弃特性
                return `¥${data.toFixed(2)}`
            }
          },
          filters: { // 局部过滤器,是当前vm对象的属性方法存在,所以无法被外界使用
            mon(data){
                return `¥${data.toFixed(2)}`
            }
          }
        })
    </script>
</body>
</html>
filter选项api定义

三 计算属性和侦听属性

3.1 计算属性

计算属性,是vue提供给我们开发者用于编写代码时保存计算出新的数据结果的变量。主要通过computed选项进行声明的。

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="app">
        <input type="text" v-model.number="num1">+
        <input type="text" v-model.number="num2">={{result}}
    </div>
    <script>
        var vm = Vue.createApp({
            data(){
                return{
                    num1:10,
                    num2:20,
                }
            },
            computed: {
                result(){
                    return this.num1 + this.num2
                }
            }
        }).mount("#app")
    </script>
</body>
</html>
计算属性computed

 

3.2 侦听属性 

侦听属性,可以帮助我们侦听data某个数据的变化,从而做相应的自定义操作

侦听属性一个对象,它的键是要监听的对象或者变量,值一般是函数,当侦听的data数据发生变化时,会自定执行的对应函数,这个函数在被调用时,vue会传入两个形参,第一个是变化前的数据值,第二个是变化后的数据值。

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
    <style>
        input{
            outline: none;
            border: 1px solid #333;
        }
    </style>
</head>
<body>
    <div id="app">
        账号:<input ref="username" type="text" v-model="username" @blur="check_username"><br>
        密码:<input ref="password" type="text" v-model="password"><br>
    </div>
    <script>
        var vm = Vue.createApp({
            data(){
                return{
                    username:"",
                    password:"",
                }
            },
            methods: {
                    check_username(){
                        console.log("check_username执行了。")
                }
            },
            watch: {
                username(new_data, old_data) {
                    console.log(`old_data>>${old_data},new_data>>${new_data}`)
                    let length = this.username.length;
                    if (length > 6 && length < 16) {
                        this.$refs.username.style.border = "1px solid blue";
                    } else {
                        this.$refs.username.style.border = "1px solid red";
                    }
                },
                password(new_vuale, old_value) {
                    if (/^\d+$/.test(this.password)) {
                        this.$refs.password.style.block = "1px solid red";
                    } else {
                        this.$refs.password.style.block = "1px solid blue";
                    }
                }
            },

        }).mount("#app")
    </script>
</body>
</html>
侦听属性watch

 

四 指令和事件修饰符

4.1 常用指令

指令 描述
v-model.trim 用于去除字符串两边的空白字符,常用于密码
v-model.lazy 用于减少触发watch侦听选项的频率,从原来的input输入事件的侦听切换成了change值改变事件的监听
v-model.number 表示把变量作为数值来进行转换提取,能转的都会转换

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="app">
        <input type="password" v-model.trim="password"><br>
        <input type="text" v-model.lazy="mobile"><br>
        <input type="text" v-model.number="num">+500=<span>{{ num+500 }}</span>
    </div>
    <script>
        const vm=Vue.createApp({
            data(){
                return{
                    passsword: " ",
                    mobile:"",
                    num:0,
                }
        } ,
            watch:{
                passsword(){
                    console.log(this.passsword);
                },
                mobile(){
                    console.log("发送http请求验证手机号是否在服务端注册了");
                    console.log(this.mobile)
                }
            }
        }).mount("#app");
    </script>
</body>
</html>
v-model示例

4.2 事件修饰符

子元素的同类事件触发以后,会自动触发父类元素的同类事件,这就是事件冒泡。

事件修饰符 描述
@事件名.stop 用于阻止事件冒泡
@事件名.prevent 用于阻止标签本身拥有的页面跳转功能,例如:a标签被点击,form标签提交表单

 

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="app">
        <div @click="show('div')">
            <button @click.stop="show('button')">点击</button>
            <a  @click="show('a')" href="http://www.baidu.com">点击</a>
        </div>
    </div>
    <script>
        var vm=Vue.createApp({
            data(){
                return{
                }
            },
            methods: {
                show(msg){
                    console.log(`${msg}被点击了`)
                }
            }
        }).mount("#app")
    </script>
</body>
</html>
事件修饰符.stop和.prevent

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐