美文网首页
计算属性

计算属性

作者: 东风不起尘 | 来源:发表于2022-08-08 10:28 被阅读0次

    1.姓名案例_插值语法实现

    <!DOCTYPE html>

    <html>

      <head>

        <meta charset="UTF-8" />

        <title>姓名案例_插值语法实现</title>

        <!-- 引入Vue -->

        <script type="text/javascript" src="../js/vue.js"></script>

      </head>

      <body>

        <!-- 准备好一个容器-->

        <div id="root">

          姓:<input type="text" v-model="firstName"> <br/><br/>

          名:<input type="text" v-model="lastName"> <br/><br/>

          全名:<span>{{firstName}}-{{lastName}}</span>

        </div>

      </body>

      <script type="text/javascript">

        Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

        new Vue({

          el:'#root',

          data:{

            firstName:'张',

            lastName:'三'

          }

        })

      </script>

    </html>


    2.姓名案例_methods实现

    <!DOCTYPE html>

    <html>

      <head>

        <meta charset="UTF-8" />

        <title>姓名案例_methods实现</title>

        <!-- 引入Vue -->

        <script type="text/javascript" src="../js/vue.js"></script>

      </head>

      <body>

        <!-- 准备好一个容器-->

        <div id="root">

          姓:<input type="text" v-model="firstName"> <br/><br/>

          名:<input type="text" v-model="lastName"> <br/><br/>

          全名:<span>{{fullName()}}</span>

        </div>

      </body>

      <script type="text/javascript">

        Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

        new Vue({

          el:'#root',

          data:{

            firstName:'张',

            lastName:'三'

          },

          methods: {

            fullName(){

              console.log('@---fullName')

              return this.firstName + '-' + this.lastName

            }

          },

        })

      </script>

    </html>


    3.姓名案例_计算属性实现

    <!DOCTYPE html>

    <html>

      <head>

        <meta charset="UTF-8" />

        <title>姓名案例_计算属性实现</title>

        <!-- 引入Vue -->

        <script type="text/javascript" src="../js/vue.js"></script>

      </head>

      <body>

        <!--

          计算属性:

              1.定义:要用的属性不存在,要通过已有属性计算得来。

              2.原理:底层借助了Objcet.defineproperty方法提供的getter和setter。

              3.get函数什么时候执行?

                    (1).初次读取时会执行一次。

                    (2).当依赖的数据发生改变时会被再次调用。

              4.优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便。

              5.备注:

                  1.计算属性最终会出现在vm上,直接读取使用即可。

                  2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变。

        -->

        <!-- 准备好一个容器-->

        <div id="root">

          姓:<input type="text" v-model="firstName"> <br/><br/>

          名:<input type="text" v-model="lastName"> <br/><br/>

          测试:<input type="text" v-model="x"> <br/><br/>

          全名:<span>{{fullName}}</span> <br/><br/>

          <!-- 全名:<span>{{fullName}}</span> <br/><br/>

          全名:<span>{{fullName}}</span> <br/><br/>

          全名:<span>{{fullName}}</span> -->

        </div>

      </body>

      <script type="text/javascript">

        Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

        const vm = new Vue({

          el:'#root',

          data:{

            firstName:'张',

            lastName:'三',

            x:'你好'

          },

          methods: {

            demo(){

            }

          },

          computed:{

            fullName:{

              //get有什么作用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值

              //get什么时候调用?1.初次读取fullName时。2.所依赖的数据发生变化时。

              get(){

                console.log('get被调用了')

                // console.log(this) //此处的this是vm

                return this.firstName + '-' + this.lastName

              },

              //set什么时候调用? 当fullName被修改时。

              set(value){

                console.log('set',value)

                const arr = value.split('-')

                this.firstName = arr[0]

                this.lastName = arr[1]

              }

            }

          }

        })

      </script>

    </html>


    4.姓名案例_计算属性简写实现

    <!DOCTYPE html>

    <html>

      <head>

        <meta charset="UTF-8" />

        <title>姓名案例_计算属性实现</title>

        <!-- 引入Vue -->

        <script type="text/javascript" src="../js/vue.js"></script>

      </head>

      <body>

        <!-- 准备好一个容器-->

        <div id="root">

          姓:<input type="text" v-model="firstName"> <br/><br/>

          名:<input type="text" v-model="lastName"> <br/><br/>

          全名:<span>{{fullName}}</span> <br/><br/>

        </div>

      </body>

      <script type="text/javascript">

        Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

        const vm = new Vue({

          el:'#root',

          data:{

            firstName:'张',

            lastName:'三',

          },

          computed:{

            //完整写法

            /* fullName:{

              get(){

                console.log('get被调用了')

                return this.firstName + '-' + this.lastName

              },

              set(value){

                console.log('set',value)

                const arr = value.split('-')

                this.firstName = arr[0]

                this.lastName = arr[1]

              }

            } */

            //简写

            fullName(){

              console.log('get被调用了')

              return this.firstName + '-' + this.lastName

            }

          }

        })

      </script>

    </html>

    相关文章

      网友评论

          本文标题:计算属性

          本文链接:https://www.haomeiwen.com/subject/uolkwrtx.html