1. 把字符串渲染到页面上有哪些方式?
2. v-bind 和 v-on的区别
3. 插值表达式中可以放入函数调用
这个函数是有返回值的
4. 关于驼峰命名
在html标签中 使用短横线的方式
首字母都小写,单词之间加上短横线
(DOM元素是不区分大小写的)
vm = new Vue({
el:'你要挂载在哪里就写那元素,如果是id传入# 类则传. ',
data:{
'存放要渲染到页面上的数据'
},
methods:{
'在这里定义一些函数(方法)'
}
});
① 就是一个自定义属性
② Vue 中指令都是以 v- 开头
背后的原理:先通过样式隐藏内容,,然后在内存中进行值的替换,替换好之后再显示最终的结果。
数据绑定指令:(将数据填充到标签中)
v-text
① 用于将数据填充到标签中,作用与插值表达式类似,但是没有闪动问题
② 如果数据中有HTML标签会将html标签一并输出 (比如 h1没有样式且显示)
③ 注意:此处为单向绑定,数据对象上的值改变,插值会发生变化;但是当插值发生变化并不会影响数据对象的值
v-html
① 用法与v-text类似,但是它可以将HTML片段填充到标签中
② 可能有安全问题,一般只在可信任内容上使用v-html(本网站,不跨域),永不用在用户提交的内容上
v-pre
当你只想输出‘{ {msg}}’这样的字符串时就用这个
v-once
执行一次性的插值(当数据改变时,插值处的内容不会继续更新)这样可以提高性能,不需要再监听了
那么怎么使用呢?—— 放到标签里。
<p v-cloak>{
{
msg}}</p>
<p v-html="msg"></p>
<p v-text="msg"></p>
<p v-pre>{
{
msg}}</p>
如何理解响应式:
① h5中的响应式(屏幕尺寸的变化导致样式的变化)
② 数据的响应式(数据的变化导致页面内容的变化)
需要绑定一个值:
<input type="text" v-model='id'/>
语法:v-on
例如:v-on:click / @click;
v-on事件函数中传入参数
① 直接绑定函数名称
那么默认会传递事件对象作为事件函数的第一个参数
<button v-on:click='handle1'>点击1</button>
②绑定函数调用
那么事件对象必须作为最后一个参数显示传递,并且事件对象的名称必须是$event
<button v-on:click='handle1(123,456,$event)'>点击1</button>
<!-- 阻止单击事件继续传播(冒泡) -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 即阻止冒泡也阻止默认事件 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>
<!-- 只有在 `keyCode` 是 13 时调用 `vm.submit()` -->
<input v-on:keyup.13="submit">
<!-- -当点击enter 时调用 `vm.submit()` -->
<input v-on:keyup.enter="submit">
<!--当点击enter或者space时 时调用 `vm.alertMe()` -->
<input type="text" v-on:keyup.enter.space="alertMe" >
<div id="app">
<input type="text" v-on:keydown.f5="prompt()">
</div>
<script>
Vue.config,keyCodes.f5=116;
</script>
<a v-bind:href='url'>跳转</a>
手动的实现双向数据绑定——v-model的底层实现原理
<input v-bind:value='msg' v-on:input='msg=$event.target.value' type="text">
如何绑定一个对象?
如何绑定一个数组?
<div v-bind:class='[activeClass,errorClass]'>测试样式div>
<script src="js/vue.js">script>
<script type="text/javascript">
var vm = new Vue({
el: '#computor',
data: {
activeClass: 'active',
errorClass: 'error'
},
methods: {
add: function(){
this.sum = this.a + this.b;
}
}
});
script>
<div v-bind:class='[activeClass,errorClass,{test: isTest}]'>测试样式</div>
<div v-bind:class='arrClasses'>测试样式</div>
<script src="js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#computor',
data: {
arrClasses: ['active','error'],
objClasses: {
active: true,
error: false
}
},
methods: {
add: function(){
this.sum = this.a + this.b;
}
}
});
</script>
<div v-bind:style='{border: borderStyle, width: widthStyle}'>测试样式</div>
<div v-bind:style='objStyle'>测试样式</div>
<script src="js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#computor',
data: {
borderStyle: "1px solid blue",
widthStyle: "200px",
objStyle: {
border: "1px solid blue",
width: '100px',
height: '120px'`````````````````````
}
},
methods: {
}
});
</script>
v-if => v-else-if => v-else
<div id="app">
<div v-if="type=='A'"> A div>
<div v-else-if="type==='B'">Bdiv>
<div v-else-if="type==='C'">Cdiv>
<div v-else>not A/B/Cdiv>
div>
<script>
var vm = new Vue({
el:'#app',
data:{
type:'C'
}
})
script>
– 数组里面的数值可以是对象,也可以是普通元素
1. 语法:
2. key的作用:
1. 语法
选项卡案例
1. 单选框如何实现单选
2. 复选框如何实现单选
3. 如何实现获取下拉框的选中状态
4. 如何获取文本域中的值
通过v-model 绑定一个值
.trim
自动过滤用户输入的首尾空白字符。 只能去掉首尾的 不能去除中间的空格.lazy
将input事件切换成change事件(失去焦点或者按下回车键时才更新).number
转换为数值使用自定义的指令,只需在对用的元素中,加上’v-'的前缀形成类似于内部指令’v-text’的形式。
法一:Vue.directive 注册全局指令
<input type="text" v-focus>
<script>
//注册一个全局自定义指令 v-focus
Vue.directive('指令名称',{
inserted:function(el){
//聚焦元素
el.focus();
}
});
new Vue({
el:'#app'
});
script>
注意点:
v-focus-a
来使用Vue.directive 注册全局指令——带参数:
<input type="text" v-color='msg'>
<script>
/*
① bind—— 只调用一次,在指令第一次绑定到元素上时调用(在这里可以进行一次性的初始化设置)
② el——当前自定义指令的DOM元素(你指令放在哪就是哪个元素)
binding——自定义的函数形参,通过自定义属性传递过来的值 存在binding.value 里面
*/
Vue.directive('color',{
bind:function(el,binding){
console.log(binding.value.color);
el.style.backgroundColor = binding.value.color;
}
});
var vm =new Vue({
el:'#app',
data:{
msg:{
color:'blue'
}
}
})
script>
通过自定义属性传递过来的值 存在binding.value 里面,所以msg那可以不用对象,可以直接字符串:msg:‘orange’
法二:注册局部指令
<input type="text" v-color='msg'>
<input type="text" v-focus>
<script type="text/javascript">
/*
自定义指令-局部指令
*/
var vm = new Vue({
el: '#app',
data: {
msg: {
color: 'red'
}
},
//局部指令,需要定义在 directives 的选项
directives: {
color: {
bind: function(el, binding){
el.style.backgroundColor = binding.value.color;
}
},
focus:{
inserted:function(el){
el.focus();
}
}
script>
<div id="app">
<div>{
{reverseString}}div>
<div>{
{reverseString}}div>
<div>{
{reverseMessage()}}div>
<div>{
{reverseMessage()}}div>
div>
<script type="text/javascript">
/*
计算属性与方法的区别:
① 计算属性是基于依赖进行缓存的,而方法不缓存
② 计算属性使用时,是当成属性使用,而方法是需要调用的
*/
var vm = new Vue({
el: '#app',
data: {
msg: 'Nihao',
num: 100
},
methods: {
reverseMessage: function(){
console.log('methods')
return this.msg.split('').reverse().join('');
}
},
//computed 属性 定义 和 data、methods 平级
computed: {
// reverseString 这个是我们自己定义的名字
reverseString: function(){
console.log('computed')
var total = 0;
// 当data 中的 num 的值改变的时候 reverseString 会自动发生计算
for(var i=0;i<=this.num;i++){
total += i;
}
// 这里一定要有return 否则 调用 reverseString 的 时候无法拿到结果
return total;
}
}
});
script>
例子:
<div id="app">
<div>
<span>名:span>
<input type="text" v-model="firstName">
div>
<div>
<span>姓:span>
<input type="text" v-model="lastName">
div>
<div>{
{fullName}}div>
div>
<script type="text/javascript">
var vm = new Vue({
el:'#app',
data:{
firstName:'',
lastName:'',
fullName:'',
},
watch:{
firstName:function(val){
this.fullName = val +' '+this.lastName;
},
lastName:function(val){
this.fullName = this.firstName + ' '+val;
}
}
})
script>
使用计算属性也可以实现:
<div>{
{allName}}div>
<script>
computed:{
allName:function(){
return this.firstName+ ' '+this.lastName;
}
}
script>
感觉:
监听器监听属性变化,给属性写监听事件,无需调用
计算属性是写好方法给你调用
用户名案例思路:
<div id="app">
<div>
<span>用户名:span>
<input type="text" v-model.lazy="uName">
<span>{
{tip}}span>
div>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
var vm = new Vue({
el:'#app',
data:{
uName:'',
tip:'',
},
methods:{
checkName:function(name){
var that = this;
setTimeout(function(){
if(name=='admin'){
that.tip='用户名已经存在,请更换一个';
}else{
that.tip='用户名可以使用';
}
},2000)
}
},
watch:{
uName:function(val){
this.checkName(val); //可以调用方法嘚
this.tip='正在验证...';
}
}
})
script>
语法:
Vue.filter(‘过滤器名称’,function(value){
过滤器业务逻辑
})
使用:
< div > { {msg|upper}} < /div >
< div > { {msg|upper|lower}} < /div >
2. 过滤器中传递参数
语法:
Vue.filter(‘过滤器名称’,function(value,arg1,…){
过滤器业务逻辑
})
第二个函数开始去接收传递来的参数,第一个value默认为过滤器传递来的参数(‘不是你放进去的‘)
使用:
< div > { { date | format(‘yyyy-MM-dd’) }} < /div >
案例:格式化日期
调用了一个别人写好的正则日期,不需要自己写了
mounted钩子函数: 这个函数一旦被触发,表示初始化已经完成了,初始化完成以后页面中的模板就已经存在了,就可以向里头填充数据。
插值表达式可以进行一些简单的计算
注意this!