Vue 2.x 实战之后台管理系统开发(二)

1. 导语

承接上文:Vue 2.x 实战之后台管理系统开发(一)

在上一篇文章中,我详细叙述了如何创建项目框架和引入各种后台常用插件,做好这些准备工作后,我们就可以着手进行页面的开发了。在开发过程中,会遇到一些常见的需求和问题,我整理了一下,有以下几点。

2. 常见需求

01. 父子组件通信

a. 父 -> 子(父组件传递数据给子组件)

使用 props,具体查看文档 - 使用 Prop 传递数据(https://cn.vuejs.org/v2/guide/components.html#使用-Prop-传递数据)

b. 父 -> 子(在父组件上调用子组件内的方法)

使用 ref,具体查看文档 - 子组件索引(https://cn.vuejs.org/v2/guide/components.html#子组件索引)


// 父组件 script
this.$refs.profile.someMethod();

注意:如果在子组件上设置 ref 属性,则可以通过 this.$refs 获取到该子组件对象,如果在普通的 html 标签上设置 ref 属性,则获取到的是 Dom 节点。

c. 子 -> 父(在父组件上获取子组件内的数据)

同上,也是利用 ref

// 父组件 script
let childData = this.$refs.profile.someData;

d. 子 -> 父(子组件内触发事件,父组件监听事件)

父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件,具体查看文档 - 使用 v-on 绑定自定义事件(https://cn.vuejs.org/v2/guide/components.html#使用-v-on-绑定自定义事件)


// 父组件 script
methods: {
    parentHandle(params){
        // 这个方法在子组件 emit childTrigger 事件后会执行
        // params 为子组件里触发事件时传的参数
    }
}
// 子组件 user-profile script
this.$emit('childTrigger', params);

e. 子 -> 父(子组件传值,父组件里使用,具体实现见 03

01总结:
应用场景示例:在父组件上打开侧边栏子组件,可以传 prop visible(true)来控制侧边栏打开;侧边栏内部有关闭按钮,就在点击关闭按钮后触发一个事件,父组件监听事件执行方法将 data visible 改为 false
PS:父组件传值到子组件,传的值是 Object 类型,子组件使用 v-model 可以修改该值(将某个表单元素的 v-model 设为该值),父组件可直接获取到改变后的值。

02. 全局函数

有时候会用到一些工具类函数,希望可以全局调用,而不是局限于某个组件中。

Step 1:
项目根目录/static/js/ 目录下新建一个 util.js 文件,将常用的工具函数写在这里面。

Step 2:
index.html 里面引入 util.js,就可以在 .vue 文件里使用那些方法了,如下:


  

02总结:
使用这个方法可以使得一些使用频率高的函数可以在所有 .vue 文件中被调用,笨拙而又简单。

03. slot

以前看文档时一直不理解如何使用 slot,现在用多了 elementui 的组件之后,就渐渐发现了它的实用性。
简单来说,使用 slot 可以使我们做到:在父组件里使用子组件时,在子组件里插入一些自定义的内容(html 代码啥的),具体查看文档:http://cn.vuejs.org/v2/guide/components.html#使用-Slot-分发内容;
更神奇的功能是 作用域插槽,可以让我们在父组件里使用子组件时,获取子组件传来的数据,具体查看文档:http://cn.vuejs.org/v2/guide/components.html#作用域插槽。

简单应用示例





这里写的东西会覆盖子组件里的 slot 标签所在的位置

渲染结果:


可以应用简单的 slot 来达到为不同的按钮填充文字的目的:

详情
搜索




作用域插槽示例


在父级中,具有特殊属性 scope