Vue学习笔记4 | 青训营笔记

58 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第9天

姓名案例

插值语法

<body>
<!--准备的容器,id选择器-->
    <div id="root">
        姓:<input type="text" v-model:value="firstname"> <br>
        名:<input type="text" v-model:value="lastname"> <br>
        姓名:<span>{{firstname.slice(0,3)}}{{lastname}}</span>
        <!--slice截取-->
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false;//组织Vue在启动时生成生产提示
    new Vue({
      el:'#root',
      data:{
        firstname:'张',
        lastname:'三'
        }
      })
</script>

使用methods实现

<body>
<!--准备的容器,id选择器-->
<div id="root">
  姓:<input type="text" v-model:value="firstname"> <br>
  名:<input type="text" v-model:value="lastname"> <br>
  姓名:<span>{{fullname()}}</span>
  <!--slice截取-->
</div>
</body>

<script type="text/javascript">
  Vue.config.productionTip = false;//组织Vue在启动时生成生产提示
  new Vue({
    el:'#root',
    data:{
      firstname:'张',
      lastname:'三'
    },
    methods:{
      fullname(){
        return this.firstname+this.lastname
      }
    }
  })
</script>

计算属性实现

<body>
<!--准备的容器,id选择器-->
<div id="root">
    姓:<input type="text" v-model:value="firstname"> <br>
    名:<input type="text" v-model:value="lastname"> <br>
    姓名:<span>{{fullname}}</span>
    <!--slice截取-->
</div>
</body><script type="text/javascript">
    Vue.config.productionTip = false;//组织Vue在启动时生成生产提示
    const vm = new Vue({
        el:'#root',
        data:{
            firstname:'张',
            lastname:'三'
        },
        computed:{
            fullname:{
                //get的作用:当有人读取fullname时,get就会被调用,且返回值就作为fullname的值
                //get什么时候调用,1、初次读取fullname时,2、所依赖的数据发生变化时
                get(){
                    return this.firstname+this.lastname//此处的this是vm
                },
                //当fullname被修改的时候set被调用
                set(value){
                    console.log('set',value)
                    const arr = value.split('-')//按什么来拆分为数组
                    this.firstname = arr[0]
                    this.lastname = arr[1]
                }
            }
        }
    })
</script>

计算属性:

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

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

3.get函数什么时候执行? (1).初次读取时会执行一次。

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

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

5.备注:

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

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

简写

computed:{       
     fullname(){
     return this.firstname+this.lastname
    }
}

监视属性

监视属性watch:

1.当被监视的属性变化时,回调函数自动调用, 进行相关操作

2.监视的属性必须存在,才能进行监视!! 3.监视的两种写法:

(1).new Vuel时传入watch配置

(2).通过vm.$watch监视

深度监视:

(1).Vue中的watch默认不监测对象内部值的改变(一层)。

(2).配置deep:true可以监测对象内部值改变(多层)

备注:

(1).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!

(2),使用watch时根据数据的具体结构,决定是否采用深度监视。

简写:使用函数

watch对比computed

computed.和watch之间的区别:

1.computed能完成的j能watch都可以完成。

2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。

两个重要的小原则:

1,所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm或组件实例对象。

2,所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数、Promise的回调函数等),最好写成箭头函数, 这样this的指向才是vm或组件实例对象。