通过v-model
checkbox
这种的组合时 data 中的 值 我们要定义成数组 否则无法实现多选.number
转换为数值.trim
自动过滤用户输入的首尾空白字符.lazy
将input事件切换成change事件.lazy
修饰符延迟了同步更新属性值的时机,即将原本绑定在 input 事件的同步逻辑转变为绑定在 change 事件上注意点:
Vue.directive('focusA',function(){})
v-focus-a
来使用el
为绑定的 DOM 元素binding
为自定义的函数形参,通过 自定义属性 传递过来的值存在 binding.value
里面<input type="text" v-a='msg'>
<script>
Vue.directive('a', {
inserted: function (el, binding) {
el.style.backgroundColor = binding.value.qwe
}
})
script>
directives
的选项,用法和全局用法一样let vm = new Vue({
el: '#box',
data: {
msg: {
}
},
methods: {
},
directives: {
color: {
inserted: function (el, binding) {
el.style.backgroundColor = binding.value.qwe
}
}
}
})
<body>
<div id="box">
<div>{
{msg}}div>
<div>{
{msg.split('').reverse().join('')}}div>
<div>{
{reverseString}}div>
div>
<script src="./vue.js">script>
<script>
let vm = new Vue({
el: '#box',
data: {
msg: '远近渔'
},
computed: {
// reverseString 这个是我们自己定义的名字
reverseString: function () {
// 当data 中的值改变的时候
// reverseString 会自动发生计算
// 这里一定要有return
// 否则调用 reverseString 的时候无法拿到结果
return this.msg.split('').reverse().join('')
}
},
methods: {
},
directives: {
}
})
script>
body>
computed
是基于他们的依赖进行缓存的reverseString
的时候只要 data
里面的 num
值不改变他会把第一次计算的结果直接返回data
中的 num
值改变,计算属性才会重新发生计算methods
不存在缓存methods
中的方法的时候,他每次会重新调用watch
来响应数据的变化data
中已经存在的数据<body>
<div id="box">
<div>
<span>名:span>
<span>
<input type="text" v-model='aName'>
span>
div>
<div>
<span>姓:span>
<span>
<input type="text" v-model='bName'>
span>
div>
<div>{
{abName}}div>
div>
<script type="text/javascript" src="./vue.js">script>
<script type="text/javascript">
let vm = new Vue({
el: '#box',
data: {
aName: '远近渔',
bName: '渔渔子',
abName: '远近渔 渔渔子'
},
methods: {
},
computed: {
},
watch: {
// val 是 aName 的最新值
aName: function (val) {
this.abName = `${ val} ${ this.bName}`
},
bName: function (val) {
this.abName = `${ this.aName} ${ val}`
}
},
directives: {
}
})
script>
body>
<body>
<div id="box">
<div>
<span>用户名:span>
<span>
<input type="text" name="" id="" v-model.lazy='a'>
span>
<span>{
{b}}span>
div>
div>
<script type="text/javascript" src="./vue.js">script>
<script type="text/javascript">
let vm = new Vue({
el: '#box',
data: {
a: '',
b: ''
},
methods: {
checkName: function (a) {
let that = this
// 调用接口,但是可以使用定时任务的方式模拟接口调用
setTimeout(function () {
if(a == 'admin') {
that.b = '存在'
} else {
that.b = '111'
}
}, 2000)
}
},
computed: {
},
watch: {
a: function (val) {
// 调用后台接口验证
this.checkName(val)
this.b = 'loading......'
}
},
directives: {
}
})
script>
body>
data
,只是改变渲染的结果,并返回过滤后的版本Vue.filter ('过滤器名称', function () {
// 过滤器业务逻辑
})
<body>
<div id="box">
<input type="text" v-model='msg'>
<div v-cloak>{
{msg | a | b}}div>
<div>{
{msg | ccc}}div>
<div :abc='msg | a'>div>
div>
<script src="./vue.js">script>
<script>
// 自定义过滤器
Vue.filter('a', function (val) {
return `${ val.charAt(0).toUpperCase()}${ val.slice(1)}`
});
Vue.filter('b', function (val) {
return `${ val.charAt(0).toLowerCase()}${ val.slice(1)}`
});
let vm = new Vue({
el: '#box',
data: {
msg: ''
},
// 全局过滤器
filters: {
ccc: function (val) {
return `${ val.charAt(0).toUpperCase()}${ val.slice(1)}`
}
},
methods: {
},
computed: {
},
watch: {
},
directives: {
}
})
script>
body>
第一个形参接受的是元素的值,后面才接收传参
<body>
<div id="box">
<div>{
{date | a('yyyy-MM-dd')}}div>
div>
<script src="./vue.js">script>
<script>
Vue.filter('a', function (val, arg) {
if (arg == 'yyyy-MM-dd') {
var ret = ''
ret += `${ val.getFullYear()}-${ val.getMonth()+1}-${ val.getDate()}`
return ret
}
})
let vm = new Vue({
el: '#box',
data: {
date: new Date()
},
filters: {
},
methods: {
},
computed: {
},
watch: {
},
directives: {
}
})
script>
body>
就是 Vue 实例从创建到销毁的过程
这些过程中会伴随着一些函数的 自调用,我们称这些函数为 钩子函数
挂载 | 初始化相关属性 |
---|---|
beforeCreate | |
created | |
beforeMount | |
mounted | 一旦此函数触发就代表初始化完成了 |
更新 | 元素或组件的变更操作 |
---|---|
beforeUpdate | 数据更新时调用,发生在虚拟DOM打补丁之前,页面上数据还是旧的 |
updated | 由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子,页面上数据已经替换成最新的 |
销毁 | 销毁相关属性 |
---|---|
beforeDestroy | 实例销毁之前调用 |
destroyed | 实例销毁后调用 |