Vue零杂知识合集


一、基础知识

1. 样式引用

(1) 链路式
<link href="<css_path>" type="text/css" rel="stylesheet" />
(2) 嵌入式

直接将样式写在标签内,适合只需少量调整的样式。

<tag-name style="">content</tag-name>
(3) 内嵌式
<style type="text/css">
    selector .....
</style>

2. 方法异步

(1) async 关键字

关键字 async 放到函数前面,表示函数是一个异步函数,意味着该函数的执行不会阻塞后面代码的执行。

(2) await 关键字

关键字 await 通常作用于方法前,表示只有接收到当前的方法返回值才会继续后面代码。

如我们需要用到接口请求结果,但是数据操作并没有放在接口返回事件中,如果没有 await 则会导致数据异步无法获取。

// 无同步效果
function1() {
    let result = {}
    getUser().then(res => {
        result = res.data
    })
    // 数据异步可能导致无法获取
    console.log(result)
}

// 同步效果
async function1() {
    let result = {}
    // 接口完毕才会执行后续代码
    await getUser().then(res => {
        result = res.data
    })
    // 一定能成功打印数据
    console.log(result)
}

3. 方法括号

当控键所绑定方法事件不带括号时,默认参数中将包含 event 事件,如果加括号则并不包含,此时如果要使用到 event 则需要手动添加参数。

(1) 页面代码
<!-- 默认带 event -->
<button @click="fun1">按钮 1</button>

<!-- 不带 event -->
<button @click="fun2('123')">按钮 2</button>

<!-- 手动添加 event -->
<button @click="fun3($event, '123')">按钮 3</button>
(2) JS 代码

上述示例中对应的事件方法代码如下:

method: {
    fun1(event) {
        console.log(event)
    },
    fun2(data) {
        // 无法获取到 event 事件
        console.log(data)
    },
    fun3(event, data) {
        console.log(data)
        console.log(event)
    }
}

二、CSS样式

1. 图片填充

设置 no-repeat 当大小不贴合时不进行拼接, background-size 设置图片 100% 填充。

.img{
    background: url("../assets/back.png") no-repeat;
    background-size: 100% 100%;
}

2. 块设置圆角

默认的 div 块为直角,通过 border-radius 参数修改为圆角。

.app{
    border-radius: 25px;
}

3. 布局填充

Antd 默认布局组件显示为自适应,我们可以设置填充页面, HTML 代码如下:

<div id="home">
    <a-layout class="sideBar">
        <!-- content -->
    </a-layout>
</div>

注意这里必须设置 position 样式布局,直接设置 height: 100% 是不起作用的,具体 CSS 样式如下:

#home{
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0px;
    left: 0px;
}
.sideBar{
    height: 100%;
}

4. 表单红点

默认 Antd 表单 item 是没有小红点的,如果某个字段必填,我们需要自定义在页面标签前显示小红点, CSS 样式如下:

.required .ant-form-item-label label::before {
    content: '*';
    line-height: 1;
    display: inline-block;
    margin-right: 4px;
    color: #f5222d;
    font-size: 14px;
    font-family: SimSun, sans-serif;
}

a-form-item 中引入上述样式:

<a-form-item class="required">
    <!-- content -->
</a-form-item>

三、异常处理

1. 控件失效

当按钮设置了浮动导致无法点击只需要添加 z-index: 1 即可。

<a-button type="link"
    style="float: left; z-index: 1;"
    @click="register"
  >注册</a-button>

2. 请求头乱码

在前后端数据通讯中,当后端返回数据的请求头内容在包含中文字符时将会出现乱码问题,因此在传输前需要先通过 URLEncoder.encode() 对数据编码,前端接收到后再对进行相应的解码处理。

后端加密代码如下:

// 加密文件名
String fileName = URLEncoder.encode("测试文件名", "UTF-8");

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-disposition", "attachment; filename=" + fileName);

前端解密代码如下:

let fileName = res.headers["content-disposition"]
// 解密文件名
fileName = decodeURI(fileName)

四、功能设计

1. 页面监控

通过监控页面关闭操作并作出对应的操作,在需要监控的页面添加如下代码:

mounted() {
    window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
},
methods:{
    beforeunloadHandler(e) {
        // 关闭页面后的操作
    }
}

2. 回车绑定

通常我们会将回车键与确定按钮进行绑定,用户单击回车等同于点击确认按钮。需要注意一定要在 destroyed() 中销毁事件,实现代码如下:

mounted () {
    window.addEventListener("keydown", this.keyDown);
},
destroyed() {
    // 页面关闭销毁事件
    window.removeEventListener("keydown", this.keyDown, false);
},
methods: {
    keyDown(e) {
        // Enter 键的 ASCII 是 13
        if (e.keyCode === 13) {
            // 按下回车执行 ok() 方法
            this.ok();
        }
    },
    ok() {
        // do something
    }
}

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录