vue2 记录(高阶)

advance

1 component

字母全小写且必须包含一个连字符 
kebab-case (短横线分隔命名) 
Vue.component('my-component-name', { /* ... */ })

使用 PascalCase
Vue.component('MyComponentName', { /* ... */ })

2  全局注册
Vue.component 来创建组件 即全局注册
Vue.component('my-component-name', {
  // ... 选项 ...
})

3  局部注册
可以通过一个普通的 JavaScript 对象来定义组件
var ComponentA = { /* ... */ }
var ComponentB = { /* ... */ }
var ComponentC = { /* ... */ }
然后在 components 选项中定义你想要使用的组件
new Vue({
  el: '#app',
  components: {
    'component-a': ComponentA,
    'component-b': ComponentB
  }
})

4 模块系统中局部注册
推荐创建一个 components 目录,并将每个组件放置在其各自的文件中
然后你需要在局部注册之前导入每个你想使用的组件。例如,在一个假设的 ComponentB.js 或 ComponentB.vue 文件中:

import ComponentA from './ComponentA'
import ComponentC from './ComponentC'

export default {
  components: {
    ComponentA,
    ComponentC
  },
  // ...
}
现在 ComponentA 和 ComponentC 都可以在 ComponentB 的模板中使用了


5  基础组件的自动化全局注册


6

非 Prop 的特性  [未走通]

7
自定义事件 
    事件名称 区分大小写,要完全匹配
    
    我们知道父组件是使用props传递数据给子组件,如果子组件要把数据传递回去,怎么办? 
    那就是要自定义事件!使用v-on绑定自定义事件 每个Vue实例都实现了事件接口(Events interface), 
    即 使用$on(eventName) 监听事件 $emit(eventName) 触发事件
    
8 slot
        1.1 单个插槽(单个插槽,别名默认插槽、匿名插槽,不用设置name属性)

        1.2 具名slot(插槽加了name属性,就变成了具名插槽。具名插槽可以在一个组件中出现N次,出现在不同的位置)

        1.3 作用域slot
        https://www.cnblogs.com/cisum/p/9618346.html    
9
  件实例能够被在它们第一次被创建的时候缓存下来。为了解决这个问题,我们可以用一个 元素将其动态组件包裹起来。
  
          
        
          
        

        
10
访问根实例
在每个 new Vue 实例的子组件中,其根实例可以通过 $root 属性进行访问    
this.$root.baz()

11  
访问父级组件实例
$parent    

12 
访问子组件实例或子元素
        ref 特性为这个子组件赋予一个 ID 引用
        
        
        this.$refs.usernameInput
        
13  依赖注入  
        provide 选项允许我们指定我们想要提供给后代组件的数据/方法
        provide: function () {
          return {
            getMap: this.getMap
          }
        }
        然后在任何后代组件里,我们都可以使用 inject 选项来接收指定的我们想要添加在这个实例上的属性
        inject: ['getMap']
                
        实际上,你可以把依赖注入看作一部分“大范围有效的 prop”,除了:

        祖先组件不需要知道哪些后代组件使用它提供的属性
        后代组件不需要知道被注入的属性来自哪里        

14 序列化侦听
        
        现在,你已经知道了 $emit 的用法,它可以被 v-on 侦听,但是 Vue 实例同时在其事件接口中提供了其它的方法。我们可以:

        通过 $on(eventName, eventHandler) 侦听一个事件
        通过 $once(eventName, eventHandler) 一次性侦听一个事件
        通过 $off(eventName, eventHandler) 停止侦听一个事件
        
        例 :
            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()
                })
              }
            }
        
15 组件之间的循环引用 

         组件,模板是这样的:

        


          {{ folder.name }}
          
        

        


        还有一个 组件,模板是这样的:

        


              

  •             
                {{ child.name }}
              

  •         

        
        组件引入:
        beforeCreate: function () {
          this.$options.components.TreeFolderContents = require('./tree-folder-contents.vue').default
        }
        或者
        components: {
          TreeFolderContents: () => import('./tree-folder-contents.vue')
        }
16
内联模板  类似于