Vue 入门

属性绑定 [ :attr="" ]:



  数据绑定:{{ msg2 }}

事件绑定/事件处理 [ @click="" ]:



类(class)绑定 [ :class="" ]:


'isActive'决定是否使用active类名
与静态类共存
数组形式,数组内均为动态数据,需要静态字符串需要加''
可使用三元表达式

双向绑定 [ v-model="" ]:

本质是 v-bind事件 的语法糖。

注意:v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源。


同步绑定data内的message:{{ message }}

自定义组件的 双向绑定 [ v-model="" ]:

// 假设有如下组件
Vue.component('base-checkbox', {
  // model设定数据来源及发送数据源
  model: {
    prop: 'checked',
    event: 'change'
  },
  // 注意,仍需要在本子组件的props内声明checked
  props: {
    checked: Boolean
  },
  template: `
    
  `
})
// 然后就可以在父组件中使用 v-model 双向绑定数据

 .sync(上例子的进阶写法):  [ $emit('update:***', ***)  ]

Vue.component('base-checkbox', {
  props: {
    checked: Boolean
  },
  template: `
    
  `
})
// 父组件的 "lovingVue" 与子组件的 "checked" 双向绑定

条件渲染 [ v-if="" / v-show="" ]:

<!-- 不具备缓存,每次均重新渲染 -->

Yes

No(可不使用)

<!-- 具备缓存,总是被渲染,display -->

Yes


列表渲染 [ v-for="i in list" ]:


{{ index }}. {{ key }}: {{ value }}

vue实例特有属性及钩子函数

// 计算,具有缓存,可减少计算
computed: {
  fn1() {return ...}
}
// 方法,与计算类似,但不具备缓存
method: {
  fn2() {...}
}
// 监听,方法名为'data'内数据名,假设有'msg:1;count:0'
watch: {
  msg(val) {
    this.count += val;
  }
}
// "创建后"钩子函数
created() { ... }
// "挂载后"钩子函数
mounted() { ... }
// 更多钩子函数见下图

Vue 入门_第1张图片

注意"computed" 内的函数首次执行"beforeMount" 钩子函数之后, "mounted" 钩子函数之前。

beforeMount(){ console.log('beforeMount') },
mounted(){ console.log('mounted') },
computed: {
  count(){
    console.log('computed');
    return 1
  }
}
/* 
*  打印结果:
*    beforeMount
*    computed
*    mounted
*/

computed 内使用 "setter" 和 "getter"

computed: {
  someValue: {
    get(){
      return this._someValue
    },
    set(newValue){
      // 指定一定操作...
      this._someValue = newValue
    }
  }
}

组件注册: [ components: { ... } ]

// 全局注册组件, 使用组件
Vue.component('my-component-name', { /* ... */ })
// 局部注册组件,在vue实例内部的component属性注册。 使用组件
components: {
  'component-a': ComponentA,
  'component-b': ComponentB
}

// 实际使用组件
// 抛出组件
export default {
  // js逻辑
}
// 引入组件,并注册到components属性内
import App from './path'
new Vue({
  components: { App }
})

"X-Templates" 定义组件:

// 通过一个 id 将模板引用过去

// 该方法慎用,这会将模板和该组件的其它定义分离开
Vue.component('hello-world', {
  template: '#hello-world-template'
})

"v-once" 创建低开销的静态组件:

// 组件包含了大量静态内容。在根元素上添加 v-once 特性以确保这些内容只计算一次然后缓存起来
Vue.component('terms-of-service', {
  template: `
    

Terms of Service

... a lot of static content ...
` })

props用法/props验证:

注意:props内注册的属性大小写不敏感,会把"camelCase"转化成"kebab-case"

// prop用于父组件向子组件传递数据,两种方式注册
// 数组类型
props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
// 对象类型,可设定传入数据类型
props: {
  // 基础的类型检查 (`null` 匹配任何类型)
  propA: Number,
  // 多个可能的类型
  propB: [String, Number],
  // 必填的字符串
  propC: {
  type: String,
    required: true
  },
  // 带有默认值的数字
  propD: {
    type: Number,
    default: 100
  },
  // 带有默认值的对象
  propE: {
  type: Object,
  // 对象或数组默认值必须从一个工厂函数获取
  default: function () {
      return { message: 'hello' }
    }
  },
  // 自定义验证函数
  propF: {
    validator: function (value) {
    // 这个值必须匹配下列字符串中的一个
    return ['success', 'warning', 'danger'].indexOf(value) !== -1
    }
  }
}
// 父组件传入参数

自定义事件: [ this.$emit('myEvent')  @myEvent="fn" ]

// 可用于子组件向父组件传递数据
// 注册自定义事件,args可省略
this.$emit('myEvent', args);
// 监听触发自定义事件


// .native 修饰符
// 用于绑定标签原生事件


// .sync 修饰符
// 实现父组件与子组件的prop双向绑定

插槽 [ ] :

// 假设子组件名称为"base-box"
// 子组件定义具名插槽

// 父组件使用子组件的插槽

动态组件缓存(不重新渲染) [ ] :





  

异步组件:

 

程序化的事件侦听器: [ 如: this.$once('hook:beforeDestroy', callback) ]

// 程序化销毁第三方对象
mounted: function () {
  this.attachDatepicker('startDateInput')
  this.attachDatepicker('endDateInput')
},
methods: {
  attachDatepicker: function (refName) {
    var picker = new Pikaday({ field: this.$refs[refName], format: 'YYYY-MM-DD' })
    // 钩子函数的特别用法
    this.$once('hook:beforeDestroy', function () {
      picker.destroy()
    })
  }
}

混入:  [ mixins ]

官方定义:混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。

定义:(与组件创建无异)

var myMixin = {
  data() {
    return { ... }
  },
  created() { ... },
  methods: { ... }
}

注册

new Vue({
  mixins: [myMixin],
  // ...
})

同名属性/方法的优先级

1. 同名钩子函数都会被调用,且混入对象的钩子函数调用将优先于组件的钩子。

2. 其他同名属性/方法,组件的会覆盖混入对象的


 

 

你可能感兴趣的:(Vue)