Vue六大常用特性详解

Vue的常用特性:

  • 表单操作
  • 自定义指令
  • 计算属性
  • 过滤器
  • 侦听器
  • 生命周期

1. 表单操作

 <body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <div id="app">
        <form action="">
            <div>
                <span>姓名:</span>
                <input type="text" name="" id="" v-model='username'>
            </div>
            <div>
                <span>性别:</span>
                <label><input type="radio" name="" id="" value="1" v-model='sex'></label>
                <label><input type="radio" name="" id="" value="2" v-model='sex'></label>
            </div>
            <div>
                <span>爱好:</span>
                <label><input type="checkbox" name="" id="" value="1" v-model='hobby'>篮球</label>
                <label><input type="checkbox" name="" id="" value="2" v-model='hobby'>音乐</label>
                <label><input type="checkbox" name="" id="" value="3" v-model='hobby'>电影</label>
            </div>
            <div>
                <span>职业:</span>
                <select v-model='occupation'>
                    <option value="student">学生</option>
                    <option value="programmer">程序员</option>
                    <option value="actor">演员</option>
                    <option value="accountancy">会计</option>
                </select>
            </div>
            <div>
                <span>个人介绍:</span>
                <textarea>{{self}}</textarea>
            </div>
            <button @click.prevent='submit'>提交</button>
        </form>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                username:'',
                sex:'1',
                hobby:[2,3],
                occupation:'actor',
                self:'哈哈哈'
            },
            methods:{
                submit:function(){
                    console.log(this.username)
                }
            }      
        })
    </script>
</body>

表单域修饰符:
(1)number
假设表单中还有一个年龄选项,给input输入框绑定v-model='age',如果打印this.age+1,输入age为10的话,打印出来是101,因为这相当于是字符串拼接,我们应该将age转化为整数,v-model.number='age'
(2)trim
去掉字符串前后的空格,字符串中间的空格无法去除。v-model.trim='info'
(3)lazy
将input事件切换为change事件。我们在网站注册用户时,如果该网站不允许用户名重复,那么,当你选用了已经存在的用户名时,输入框底下会有相关提示,这个功能的实现就可以利用lazy修饰符。

<div id='app'>
<input type="text" name="" id="" v-model.lazy='msg'>
<div>{{msg}}</div>
</div>
<script>
        var vm = new Vue({
            el: '#app',
            data: {
                msg:''
            }
        })
 </script>

v-model是双向绑定,当input中的内容发生改变时,div中的内容也会改变,这是在我们输入每个字符时都会触发的,因为默认该事件是input事件。而当它用lazy修饰后,就变成了失去焦点时触发

2.自定义指令

Vue.directive('focus',{
            inserted:function(el){
                // el表示指令所绑定的元素
                // 获取元素的焦点
                el.focus()
            }
        })

使用:<input type="text" v-focus>
上边的自定义指令是一个全局指令,如果在组件的directives:{}里定义,就是局部指令,只允许这个组件使用。

3.计算属性

<div id="app">
        <input type="text" v-focus>
        <div>{{msg}}</div>
        <div>{{reverseString}}</div>
</div>
<script>
        var vm=new Vue({
            el:'#app',
            data:{
                msg:'hello world'
            },
            computed:{
                reverseString:function(){
                    return this.msg.split('').reverse().join('')
                }
            }
        })
</script>

计算属性与方法的区别:
计算属性是基于它们的依赖进行缓存的,方法不存在缓存。什么意思呢?

    <div id="app">
        <input type="text" v-focus>
        <div>{{msg}}</div>
        <div>{{reverseString}}</div>        
        <div>{{reverseString}}</div>
        <div>{{reversefunc()}}</div>        
        <div>{{reversefunc()}}</div>
    </div>
    <script>
        Vue.directive('focus',{
            inserted:function(el){
                // el表示指令所绑定的元素
                // 获取元素的焦点
                el.focus()
            }
        })
        var vm=new Vue({
            el:'#app',
            data:{
                msg:'hello world'
            },
            computed:{
                reverseString:function(){
                    console.log('computed')
                    return this.msg.split('').reverse().join('')
                }
            },
            methods:{
                reversefunc:function(){
                    console.log('methods')
                    return this.msg.split('').reverse().join('')
                }
            }

        })
    </script>

计算属性和方法我们都写了两个div,那是不是它们都被调用了两次呢?查看浏览器,可以发现,computed打印了一遍,methods打印了两遍。也就是说,computed只被调用了一次,事实上,只有绑定的数据msg发生变化时,computed才会被再次调用,否则,就只是第一次的执行结果。如果计算过程复杂且耗时,那么使用computed比使用methods的性能会好很多。

4.侦听器
应用场景:数据变化时执行异步或者开销较大的操作
用法:

<div id="app">
    <span>名:</span>
    <input type="text" v-model='firstName'>
    <span>姓:</span>
    <input type="text" v-model='lastName'>
    <div>{{fullName}}</div>
</div>
<script>
    var vm=new Vue({
        el:'#app',
        data:{
            firstName:'san',
            lastName:'zhang',
            fullName:'zhang san'
        },
        watch:{
            firstName:function(val){
                this.fullName=val+' '+this.lastName
            },
            lastName:function(val){
                this.fullName=this.firstName+' '+val
            }
        }
    })
</script>

在这里插入图片描述当然,这里也可以利用computed来实现:

            computed:{
                fullName:function(){
                    return this.firstName+" "+this.lastName
                }
            },

对于这个案例来说,使用computed看起来比使用watch更简单,而当出现异步操作或者情形更复杂时,我们需要使用watch。


用户名:

    var vm=new Vue({
        el:'#app',
        data:{
            username:'',
            tip:''
        },
        methods:{
            checkName:function(uname){
                // 使用定时任务的方式模拟接口调用
                var that=this
                // setTimeOut的this是windows
                setTimeout(function(){
                    if(uname=='admin'){
                        that.tip='用户名已存在'
                    }else{
                        that.tip='用户名合法'
                    }
                },2000)
            }
        },
        watch:{
            username:function(val){
                // 调用后台接口验证用户名的合法性
                this.checkName(val)
                // 修改提示信息
                this.tip='正在验证'
            }
        }
    })
</script>

5.过滤器
作用:格式化数据,比如字符串格式化为首字母大写,日期格式化为指定格式等。可以用在插值表达式或者绑定属性中。

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <div id="app">
        <input type="text" name="" id="" v-model='msg'>
        <div>{{msg | upper}}</div>
        <div :abc='msg|upper'>测试数据</div>
    </div>
    <script>
        // 过滤器
        Vue.filter('upper',function(val){
            // 原生js的方法,charAt(0)获取字符串首字母,toUpperCase转化为大写,最后拼接字符串剩余部分
            return val.charAt(0).toUpperCase()+val.slice(1)
        })
        var vm=new Vue({
            el:'#app',
            data:{
                msg:''
            }
        })
    </script>
</body>

过滤器可以级联,比如msg|upper|lower,最终显示出来的还是小写的。
带参数的过滤器(格式化日期):

<div id="app">
        <div>{{date | format('yyyy-MM-dd')}}</div>
    </div>
    <script>
        var vm=new Vue({
            el:'#app',
            data:{
                date:new Date()
            },
            filters:{
                // 第二个参数arg是调用时传入的参数
                format:function(value,arg){
                    if(arg=='yyyy-MM-dd'){
                        var ret=''
                        ret+=value.getFullYear()+'-'+(value.getMonth()+1)+'-'+value.getDate()
                        return ret
                    }
                    return value
                }
            }
        })
    </script>

6.生命周期

Vue的生命周期有八个阶段:

  • 挂载(初始化相关属性):beforeCreate、created、beforeMount、mounted
  • 更新(元素或组建的变更操作):beforeUpdate、updated
  • 销毁(销毁相关属性):beforeDestroy、destroyed

生命周期函数也叫钩子函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一个流行的前端框架,它采用了 MVVM 模式,可以帮助开发者更容易地构建现代化的单页面应用程序。下面是 Vue.js 的用法和特性详解: 1. 数据绑定:Vue.js 的一个核心特性是数据绑定,它能够让开发者更方便地处理数据和 UI 的同步更新。Vue.js 支持双向绑定,这意味着当数据发生变化时,UI 也会自动更新,反之亦然。 2. 模板语法:Vue.js 使用了一种基于 HTML 的模板语法,可以让开发者更容易理解和编写代码。这种模板语法可以支持插值、指令、过滤器等功能,帮助开发者更好地处理复杂的 UI 逻辑。 3. 组件化开发:Vue.js 的另一个核心特性是组件化开发,它可以帮助开发者将应用程序拆分成独立的组件,每个组件有自己的状态和行为。这种组件化开发方式可以提高应用程序的可维护性和可重用性。 4. 生命周期:Vue.js 的组件生命周期可以让开发者更好地控制组件的状态和行为。Vue.js 提供了一系列的生命周期钩子函数,可以在组件的不同阶段执行特定的操作。 5. 指令:Vue.js 的指令可以让开发者更方便地操作 DOM 元素,例如 v-if、v-for、v-bind 等。这些指令可以帮助开发者更好地处理复杂的 UI 逻辑。 6. 插件系统:Vue.js 提供了丰富的插件系统,可以帮助开发者扩展 Vue.js 的功能。例如,Vue.js 可以使用 Vuex 插件来管理应用程序的状态,使用 Vue Router 插件来管理应用程序的路由。 7. 路由系统:Vue.js 的路由系统可以帮助开发者更好地管理应用程序的路由。Vue.js 可以使用 Vue Router 插件来实现路由功能,支持动态路由、命名路由、嵌套路由等功能。 8. 状态管理:Vue.js 的状态管理可以帮助开发者更好地管理应用程序的状态。Vue.js 可以使用 Vuex 插件来管理应用程序的状态,支持状态的计算、异步操作、模块化管理等功能。 总之,Vue.js 是一个功能强大、易于使用的前端框架,它可以帮助开发者更好地构建现代化的单页面应用程序。它的特性包括数据绑定、模板语法、组件化开发、生命周期、指令、插件系统、路由系统和状态管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值