表单输入绑定
v-model 指令在表单 、 及 <select> 元素上创建双向数据绑定</div>
v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理
v-model 会忽略所有表单元素的 value、checked、selected attribute 的初始值而总是将
Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。
v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:
text 和 textarea 元素使用 value 属性和 input 事件;
checkbox 和 radio 使用 checked 属性和 change 事件;
select 字段将 value 作为 prop 并将 change 作为事件。
模式:都是表单绑定写 ,段落标签显示
在文本区域插值 ({{text}}) 并不会生效,应用 v-model 来代替。
v-model 会自动与表单元素“相应的值value绑定”
ABC 这时候以value为准v-model的修饰符
.lazy 添加 lazy 修饰符,从而转变为使用 change 事件进行同步
<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >
.number 将用户输入类型转为数字类型
.trim 自动过滤用户输入的空白符。
混入
var mixin = {}
var app = new Vue({
mixins: [mixin],}
这样app就有mixin的方法和属性 相同冲突时以自己为主,我觉得像继承
同名钩子函数会混合成一个数组。
自定义指令
全局
Vue.directive('focus', {
// 当绑定元素插入到 DOM 中。
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
局部
var vm = new Vue({
el: '#app',
directives:{
focus:{
inserted: function (el) {
el.focus()
}
}
}
})
使用
<div id="app">
<input v-focus>
</div>
一个指令定义对象可以提供如下几个钩子函数 (均为可选):
bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新
componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
unbind:只调用一次,指令与元素解绑时调用。
渲染函数 render
new Vue({
//render: h => h(App) //App作为根组件在这里渲染
render: h => {
return h('div', { // 第一个参数div标签,第二个参数传入对象,
第三个参数可以传入字符串或者数组
attrs: {
id: 'box' // html自带的原生属性
},
style: {
color: 'blue'
}
}, 'abc')
}
}).$mount('#app')
render:h=>{标签名,传入属性和事件,字符串或数组}
可以多重render渲染嵌套,还可以组件渲染
插件和组件
通过全局方法 Vue.use() 使用插件。
Vue.use 会自动阻止多次注册相同插件,届时即使多次调用也只会注册一次该插件
var Vue = require('vue')
var VueRouter = require('vue-router')
Vue.use(VueRouter)
局部组件导入 ‘import 组件名 from 'url'
components:{
组件名
}
**过滤器 **
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。
过滤器的使用:双花括号插值和 v-bind 表达式
<!-- 在双花括号中 -->
{{ message | capitalize }}
{{ message | filterA | filterB }} 要通过多个过滤器 意思是交
{{ message | filterA('arg1', arg2) }} 过滤器可以接受参数
message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,
表达式 arg2 的值作为第三个参数。
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>
formatId就是过滤器
全局过滤器
Vue.filter('capitalize', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
在一个组件中
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}