Vue.set方法和vm.$set方法:参数(实例对象的某一属性名,属性名,属性值)

用于给实例化Vue对象的某一个属性对象动态添加子属性。

不允许直接给实例化对象添加属性。即参数第一项不能为vm实例对象本身或是vm的根数据对象(即data/vm._data)

<script>
        const vm = new Vue({
            data: {
                name: 'LWH',
                message: {
                    age: 18,
                }
            }
        })
        // 对vm上的messgae对象添加属性是允许的
        Vue.set(vm.message, 'sex', '男')
        // 或者为
        vm.$set(vm.message, 'sex', '男')

        // 直接在vm的data内创建新属性是不行的
        Vue.set(vm, 'sex', '男')
    </script>

 

 

Vue监测数据原理:Vue会监视data中所有层次的数据。

监测对象中数据:通过setter实现监视,且在new Vue时就传入要监测的数据。

① 对象中后追加的属性,Vue不做响应式处理。

② 如需给后添加的属性增加响应式,需要使用Vue.set和vm.$set方法实现。

监测数组中数据:通过包裹数组更新元素的方法实现,本质为:

① 调用原生对应的方法对数组进行更新。

② 重新解析模板,进而更新页面。


在Vue中修改数组的某个元素方法:

① 使用改变原数组的方法:push、pop、splice、shift、unshift、sort、reverse

② 使用Vue.set和vm.$set方法

③ 若想使用不改变原数组的filter,slice,concat等方法,需要使用新数组覆盖旧数组。

warning:Vue.get和vm.$get不能给vm或vm的根数据对象添加属性!

 

数据劫持:实例化Vue对象时传入的data经过处理后以getter和setter的形式进行管理的过程。后续对属性进行读改都要经过setter和getter处理。

 

收集表单数据:

① 若类型为text表单,v-model收集用户输入的value值。

② 若类型为radio,则需要配置value属性,配合v-model使用。

③ 若类型为checkbox,在未配置value时v-model默认收集checked属性(是否选中)。如果有多个checkbox,则用数组进行取值。

④ v-model的修饰符:number转化为数值类型,lazy失去焦点再获取数据,trim去除首尾空格。

 

过滤器:对要显示的数据进行特定格式化后再显示(仅适用于简单的逻辑处理)

语法:

① 注册过滤器:(全局) Vue.filter(过滤器名,回调函数)、(局部) new Vue({filters:函数})

② 使用过滤器:{{xxx | 过滤器名}} 或 v-bind:属性="xxx | 过滤器名"

备注:

① 多滤器接受默认参数为调用属性,也可以接受额外参数,多个过滤器间可以串联。

② 过滤器不会改变原数据,是产生新的对应数据。

 

<!-- 过滤器实现 -->
<h3>{{time | timeFormat | myslice}}</h3>
<h3 :x="time | myslice"></h3>

<script>
// 定义全局过滤器
        Vue.filter('myslice', function (value) {
            return value.slice(0, 3)
        })
// 局部过滤器
        filters: {
            timeFormat(value, str = "YYYY-MM-DD HH:mm:ss") {
                return dayjs(value).format(str)
             },
          }
</script>