4.vue2.x之vue2.x的选项 / 数据

vue2.x之vue2.x的选项 / 数据

data

类型: Function | Object
直接创建一个实例,data可以是一个对象:

var vm = new Vue({
  data: data
})

构造器或者说子组件中的data必须是一个函数,因为这类组件可能被多次复用,如果每次都共用一个对象里的数据会产生冲突混乱,而通过闭包,每次共享援引的对象为全新副本数据对象。

var Component = Vue.extend({
  data: function () {
    return { a: 1 }
  }
})

访问data

const objV1=vm.$data.a
//vm代理了data里面的数据
//注意:$或者_开头的键名不会被vm代理,因为可能是vm原始的数据或者方法
const objV2=vm.a
console.log(objV1,objV2)

data的响应式原理:Vue 将会递归将 data 的属性转换为 getter/setter,从而让 data 的属性能够响应数据变化。

props

类型:Array | Object
数组写法

Vue.component('props-demo-simple', {
//props接受的值的类型没有限制
  props: ['size', 'myMessage']
})

对象写法
选项:

type: 可以是下列原生构造函数中的一种:String、Number、Boolean、Array、Object、Date、Function、Symbol、任何自定义构造函数、或上述内容组成的数组。会检查一个 prop 是否是给定的类型,否则抛出警告。Prop 类型的更多信息在此。
default: any
为该 prop 指定一个默认值。如果该 prop 没有被传入,则换做用这个值。对象或数组的默认值必须从一个工厂函数返回。
required: Boolean
定义该 prop 是否是必填项。在非生产环境中,如果这个值为 truthy 且该 prop 没有被传入的,则一个控制台警告将会被抛出。
validator: Function
自定义验证函数会将该 prop 的值作为唯一的参数代入。在非生产环境下,如果该函数返回一个 falsy 的值 (也就是验证失败),一个控制台警告将会被抛出。你可以在这里查阅更多 prop 验证的相关信息。

示例:

Vue.component('props-demo-advanced', {
  props: {
    // 检测类型
    height: Number,
    // 检测类型 + 其他验证
    age: {
      type: Number,
      default: 0,
      required: true,
      //发布组件时很有用,验证失败控制台会抛出警告。
      validator: function (value) {
        return value >= 0
      }
    }
  }
})
propsData

限制:只用于 new 创建的实例中。主要作用是传值测试。

var Comp = Vue.extend({
  props: ['msg'],
  template: '<div>{{ msg }}</div>'
})

var vm = new Comp({
  propsData: {
    msg: 'hello'
  }
})
computed

计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。

示例:

computed: {
	//箭头函数中的this并不只想vue实例,函数的第一个参数为vm实例。
  aDouble: vm => vm.a * 2
}

vuex结合computed的使用:

		computed:{
			//映射vuex中的state为计算属性,页面中触发了mutation视图也会更新.
			...mapState(['isShowTabBar'])
			}
methods

methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例。

var vm = new Vue({
  data: { a: 1 },
  methods: {
    plus: function () {
      this.a++
    }
  }
})
vm.plus()
vm.a // 2

注意:不应使用箭头函数定义methods函数,因为箭头函数中的this指向并不为vm实例.

watch
var vm = new Vue({
  data: {
    a: 1,
    b:2,
    e: {
      f: {
        g: 5
      }
    }
  },
    watch: {
    b:'someMethod',
	a:{
	    handler: function (val, oldVal) {
      	//do something
   		 },
    	//不论其被嵌套多深,都能被侦听到,同时触发回调函数a
    	 deep: true
    	 //侦听开始之后被立即触发回调函数a
    	 immediate: true
	},
	e: [
      'handle1',
      //f
      function handle2 (val, oldVal) { /* ... */ },
      {
      //g
        handler: function handle3 (val, oldVal) { /* ... */ },
        /* ... */
      }
    ],
    //侦听e.f的变化
    'e.f': function (val, oldVal) { /* ... */ }
     },
    //侦听路由的变化
   $route(to,from){
    console.log(to.path);
  }

注意:不应该使用箭头函数来定义 watcher 函数,同methods函数会出现this指向的问题.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值