背景:希望所有涉及密码的地方都禁止复制、粘贴,考虑到需要修改的地方较多,所以采用自定义指令的方式来实现此功能。
1.新建一个名为directives的文件夹,然后分别新建index.js和password.js文件
password.js文件中代码如下:
// 密码框禁止复制和粘贴密码的指令
const EVENTS = ['cut', 'copy', 'paste']
function prevent (event) {
event.preventDefault()
return false
}
export default {
inserted: (el) => {
console.log(el);
if (!el) return
EVENTS.forEach(event => {
el.addEventListener(event, prevent)
})
},
unbind: (el) => {
if (!el) return
EVENTS.forEach(event => {
el.removeEventListener(event, prevent)
})
}
}
index.js文件的代码如下:
import Vue from 'vue'
import password from './password'
const directives = {
password
}
export default {
install: Vue => {
Object.keys(directives).forEach(key => {
Vue.directive(key, directives[key])
})
}
}
2.在mian.js中引入该文件,即可在需要进行处理的标签中加上该指令v-password即可生效
3.实际使用示例:
<el-form-item label="" prop="newPassword" style="padding-bottom:4px;">
<tvt-input v-password :label="$translate('inputNewPasswordName')" required v-model.trim="emailForm.newPassword" @blur="checkPwdSame" type='password'
:clearable="false" :isSensitive="true" class="email_style" maxlength="32" hidden autocomplete="new-password" @input="createPyNew"></tvt-input>
</el-form-item>
<el-form-item label="" prop="confirmNewPassword">
<tvt-input v-password :label="$translate('inputConfirmNewPasswordName')" required v-model.trim="emailForm.confirmNewPassword" type='password'
:clearable="false" :isSensitive="true" class="email_style" maxlength="32" hidden autocomplete="new-password" @input="createPyCom"></tvt-input>
</el-form-item>