16 vue之计算属性


1 计算属性computed

复杂逻辑,模板难以维护
(1) 基础例子
(2) 计算缓存 VS methods-计算属性是基于它们的依赖进行缓存的。-计算属性只有在它的相关依赖发生改变时才会重新求值
(3) 计算属性 VS watch
	- v-model3

2 通过计算属性实现名字首字母大写

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js">script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js">script>
    <script src="https://unpkg.com/axios/dist/axios.min.js">script>
head>
<body>

<div id="box">

    <input type="text" v-model="msg">{{msg.substring(0,1).toUpperCase()+msg.substring(1)}}


    <p>计算属性:{{getUpper}}p>
    
    <p>普通方法:{{upperMethod()}}p>
    
div>

body>

<script>
    let vm = new Vue({
        el: '#box',
        data: {
            msg: '',
        },
        computed:{
            getUpper(){//依赖的状态改变了,会重新计算
                console.log('计算属性')
                return this.msg.substring(0,1).toUpperCase()+this.msg.substring(1)
            }
        },
        methods:{
            upperMethod(){
                console.log('普通方法')
                return this.msg.substring(0,1).toUpperCase()+this.msg.substring(1)
            }
        }

    })

script>
html>

 

3 计算属性和普通方法的区别

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js">script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js">script>
    <script src="https://unpkg.com/axios/dist/axios.min.js">script>
head>
<body>

<div id="box">

    <input type="text" v-model="msg">{{msg.substring(0,1).toUpperCase()+msg.substring(1)}}


    <p>计算属性1:{{getUpper}}p>
    <p>计算属性2:{{getUpper}}p>
    
    <p>普通方法1:{{upperMethod()}}p>
    <p>普通方法2:{{upperMethod()}}p>
    
div>

body>

<script>
    let vm = new Vue({
        el: '#box',
        data: {
            msg: '',
        },
        computed:{
            getUpper(){//依赖的状态改变了,会重新计算
                console.log('计算属性')
                return this.msg.substring(0,1).toUpperCase()+this.msg.substring(1)
            }
        },
        methods:{
            upperMethod(){
                console.log('普通方法')
                return this.msg.substring(0,1).toUpperCase()+this.msg.substring(1)
            }
        }

    })

script>
html>

 

 4.计算属性重写过滤案列

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
    <script src="./js/vue.js">script>
head>
<body>
<div class="app">
    <input type="text" v-model="myText">
    <br>
    <ul>
        <li v-for="data in newdataList">{{data}}li>
    ul>


div>

body>
<script>
    var vm = new Vue({
        el: '.app',
        data: {
            myText:'',
            dataList:['a','abc','abandon','c','curd','d','dog','doc']
        },
        computed:{
            newdataList(){
                return this.dataList.filter(item=>{
                    return item.indexOf(this.myText)>-1
                })
            }
        }

    })
script>
html>