【一】Vue实例和组件

  • Post author:
  • Post category:vue



初入Vue的世界,对这个世界的路线和环境都还是处于未知和好奇中,


而在探索的过程中,只有写将地图和风景记录在旅游手册里,下次才能更好的翻阅。

var data = { a: 1 }
  // 直接创建一个实例
  var vm = new Vue({
    data: data
  })
  alert(vm.a) // => 1
alert(vm.$data === data) // => true
0.创建一个 Vue 实例时,可传入一个选项数据对象data、props、propsData、computed、methods、watch
选项DOM对象:el、template、render、renderError
选项 / 生命周期钩子:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、activated、deactivated、beforeDestroy、destroy、errorCaptured
选项 / 资源directives、filters、components
选项 / 组合parent、mixins、extends、provide / inject
选项 / 其它name、delimiters、functional、model、inheritAttrs、comments

1.Vue 实例的数据对象(请注意是对象),被递归转成getter/setter才能响应数据变化;
2.只能 (含有零个或多个的 key/value 对);
3.实例 var vm =new Vue({})创建后,可用vm.$data 访问原始数据对象
4.实际上data对象被Vue代理了,vm.data对象属性名 = vm.$data.对象属性名
5.长成这样的属性,vm.data对象属性名是取不到值的,已经不被代理,只能用vm.$data._data对象属性名取值
 _message: 'Hello'
$item:'_和$会和 Vue 内置的属性、API 方法冲突'
6.★当一个组件被定义,data 必须声明为返回一个初始数据对象的函数
   若依旧为对象,则会被所有实例共享其引用,唯有每次创建新实例调用data函数,获取到全新的数据对象才能和其他实例区分
7.当 new Vue ({})没有 指定关联的DOM元素,处于“未挂载”状态,vm.$mount() 可手动地挂载一个未挂载的实例
8.只有当实例被创建时 data 中存在的属性才是响应式的,才会触发Watch()函数,所以最好设置一些初始值
9.Object.freeze(obj),这会阻止修改现有的属性,也意味着响应系统无法再追踪变化。
10.vm.$el === document.getElementById('元素名')
11.父级组件可以像处理 native DOM 事件一样通过 v-on 监听子组件实例的任意事件
 //定义一个名为 button-counter 的新组件
  Vue.component('button-counter', {
    props: ['title'],
    data: function () {
      return {
        count: 0
      }
    },
    template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
  })
  new Vue({ el: '#components-demo' })

  var ComponentA = { /* ... */ }
  var ComponentB = { /* ... */ }
  new Vue({
    el: '#app',
    components: {
      'component-a': ComponentA,
      'component-b': ComponentB
    }
  })
 //局部注册的组件在子组件不可用,唯有此可用
  var ComponentB = {
    components: {
      'component-a': ComponentA
    },
    // ...
  }
 0.可复用,要名字,el不一样
 1.el提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标(CSS元素/HTML元素),可用vm.$el取值
 2.如果data不是函数,则data对象的数据会被所有实例访问,存在被修改的风险,如果是函数则每用一次组件,就会有一个它的新实例被创建
 3.不管是全局注册还是局部注册,都是通过Vue.component注册的
 4.问题在于怎么区别 全局和局部注册,直接注册是使用 Vue.component
 5.全局注册的组件可以用在其被注册之后的任何 (通过 new Vue) 新创建的 Vue 根实例,也包括其组件树中的所有子组件的模板中。
 6.组件名 使用 短横线分隔命名 或者 首字母大写命名(最后使用短横线,直接在DOM (即非字符串的模板) 中使用时只有 kebab-case 是有效的)
 7.component 为可用组件的hash表
 8.通过 Prop 向子组件传递数据,当一个值传递给一个 prop 特性的时候,它就变成了那个组件实例的一个属性
 9.一个组件默认可以拥有任意数量的 prop,任何值都可以传递给任何 prop
 10.在template里面 '' 和 ` `用途不同,后者叫做模板字符串 可用来插入多行的html元素
 11.props 用于接收父组件的数据,使用v-bind:属性名字 与其['属性名']对应为动态赋值,也可静态赋值 ‘属性名’="值"



版权声明:本文为LCF_lxf_ldy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。