Vue特训

Vue高级学习

快速原型开发

npm i -g @vue/cli 
npm i -g @vue/cli-service-global

您可以*.vue使用vue serve和vue build命令只使用一个文件快速进行原型设计,但是它们需要先安装一个额外的全局插件:
npm install -g @vue/cli-service-global

组件

组件基础知识

组件分类

  • vue-router 产生的每个页面,它本质上也是一个组件(.vue)
  • 不包含业务,独立、具体功能的基础组件,比如日期选择器模态框等。这类组件作为项目的基础控件
  • 业务组件。它不像第二类独立组件只包含某个功能,而是在业务中被多个页面复用的,它与独立组件的区别是,业务组件只在当前项目中会用到,不具有通用性,而且会包含一些业务,比如数据请求;

业务组件更像是介于第一类和第二类之间,在开发上也与独立组件类似,但寄托于项目,你可以使用项目中的技术栈,比如 Vuex、axios、echarts 等,所以它的开发难度相对独立组件要容易点,但也有必要考虑组件的可维护性和复用性。

组件构成

一个再复杂的组件,都是由三部分组成的:prop、event、slot,它们构成了 Vue.js 组件的 API

属性prop

prop 定义了这个组件有哪些可配置的属性,组件的核心功能也都是它来确定的。






组件中定义了两个属性:尺寸 size 和 是否禁用 disabled。其中 size 使用 validator 进行了值的自定义验证,也就是说,从父级传入的 size,它的值必须是指定的 small、large、default 中的一个,默认值是 default,如果传入这三个以外的值,都会抛出一条警告。

使用

测试
default测试
测试

属性验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wtcTR4wW-1581341665189)(Vue特训.assets/1566653497295.png)]

插槽slot

如果要给上面的按钮组件 添加一些文字内容,就要用到组件的第二个 API:插槽 slot,它可以分发组件的内容,比如在上面的按钮组件中定义一个插槽:


当需要多个插槽时,会用到具名 slot,比如上面的组件我们再增加一个 slot,用于设置另一个图标组件:


自定义事件

组件通信

ref

p a r e n t / parent/ parent/children

  • ref:给元素或组件注册引用信息;
  • $parent / $children:访问父 / 子实例。

`$parent` 和 `$children` 类似,也是基于当前上下文访问父组件或全部子组件的。
这两种方法的弊端是,无法在**跨级**或**兄弟**间通信


provide / inject

https://cn.vuejs.org/v2/api/#provide-inject](https://cn.vuejs.org/v2/api/#provide-inject)

这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。如果你熟悉 React,这与 React 的上下文特性很相似。

provide 和 inject 主要为高阶插件/组件库提供用例。并不推荐直接用于应用程序代码中。

看不懂上面的介绍没有关系,不过上面的这句提示应该明白,就是说 Vue.js 不建议在业务中使用这对 API,而是在插件 / 组件库(比如 iView,事实上 iView 的很多组件都在用)。不过建议归建议,如果你用好了,这个 API 会非常有用。

//父组件
provide(){
      return {
        parent : this,
      };
},
//子组件
inject : [ 'parent' ],//注入,this.parent

注意点

provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。

$on 与 $emit

$emit会在**当前组件**实例上触发自定义事件,并传递一些参数给监听器的回调,一般来说,都是在父级调用这个组件时,使用@on` 的方式来监听自定义事件的,比如在子组件中触发事件:

// child.vue,部分代码省略
export default {
  methods: {
    handleEmitEvent () {
      this.$emit('test', 'Hello Vue.js');
    }
  }
}

在父组件中监听由 child.vue 触发的自定义事件 test




这里看似是在父组件 parent.vue 中绑定的自定义事件 test 的处理句柄,然而事件 test 并不是在父组件上触发的,而是在子组件 child.vue 里触发的,只是通过 v-on 在父组件中监听。既然是子组件自己触发的,那它自己也可以监听到,这就要使用 $on 来监听实例上的事件,换言之,组件使用 $emit 在自己实例上触发事件,并用 $on 监听它。

$on 监听了自己触发的自定义事件 test,因为有时不确定何时会触发事件,一般会在 mountedcreated 钩子中来监听。

仅上面的示例,的确是多此一举的,因为大可在 handleEmitEvent 里直接写 window.alert(text),没必要绕一圈。

之所以多此一举,是因为 handleEmitEvent 是当前组件内的

你可能感兴趣的:(Vue,javascript,vue)