V M交互通过VM(DOM 监听 数据绑定)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 引入vue.js -->
<script src="js/vue.js"></script>
</head>
<body>
<div id="app">
<!-- 插值表达式 支持简单的表达式计算字符串拼接等 -->
<div>{{msg}}</div>
<div>{{1 + 2}}</div>
<div>{{ msg + ‘后面可以拼接字符串哦‘}}</div>
</div>
<script>
var vm = new Vue({
/* 挂载位置 */
el: ‘#app‘,
/* 模型数据 */
data: {
msg : ‘hello world!!‘
}
});
</script>
</body>
</html>
<!-- 插值表达式 支持简单的表达式计算字符串拼接等 -->
<div>{{msg}}</div>
<div>{{1 + 2}}</div>
<div>{{ msg + ‘后面可以拼接字符串哦‘}}</div>
解决单纯使用插值表达式时刷新出现闪动问题(先显示{{}} 然后才被替换为数据)
使用方式:
提供样式
<style>
[v-cloak]{
display: none;
}
</style>
添加指令
<div v-cloak>{{msg}}</div>
原理
通过样式代码隐藏,内存替换完毕后再进行显示
数据绑定,无闪动问题(推荐)
<div v-text="msg"></div>
填充html片段
<div v-html="msg"></div>
<!--msg : "<h1>hello world!!</h1>"-->
显示原始信息,不进行编译
<div v-pre>{{msg}}</div>
<!-- 页面显示{{msg}} -->
只编译一次,数据发生更新时不进行页面更新
<div v-once>{{msg}}</div>
双向数据绑定
<div>{{msg}}</div>
<div>
<input v-model="msg" type="text">
</div>
html
<div id="app">
<!-- 插值表达式 -->
<div>{{num}}</div>
<div>
<input type="button" v-on:click="num++" value="+">
<!-- 简写 -->
<input type="button" @click="num--" value="-">
<!-- 调用方法 1 默认携带$event事件对象(第一次参数)-->
<input type="button" @click="add" value="+">
<!-- 调用方法 2 不携带事件对象 必须最后一个对象显示传递名称必须$event-->
<input type="button" @click="add()" value="+">
</div>
</div>
js
<script>
var vm = new Vue({
/* 挂载位置 */
el: ‘#app‘,
/* 模型数据 */
data: {
num: 0
},
methods: {
add: function(){
/* this == vm */
this.num++;
}
},
});
</script>
事件修饰符
<input type="button" v-on:click.stop="num++" value="+">
<a v-on:click.prevent="add" href="https://www.baidu.com">+</a>
其他
.capture
- 添加事件侦听器时使用 capture 模式。.self
- 只当事件是从侦听器绑定的元素本身触发时才触发回调。.{keyCode | keyAlias}
- 只当事件是从特定键触发时才触发回调。.native
- 监听组件根元素的原生事件。.once
- 只触发一次回调。.left
- (2.2.0) 只当点击鼠标左键时触发。.right
- (2.2.0) 只当点击鼠标右键时触发。.middle
- (2.2.0) 只当点击鼠标中键时触发。.passive
- (2.3.0) 以 { passive: true }
模式添加侦听器<!-- 方法处理器 -->
<button v-on:click="doThis"></button>
<!-- 动态事件 (2.6.0+) -->
<button v-on:[event]="doThis"></button>
<!-- 内联语句 -->
<button v-on:click="doThat(‘hello‘, $event)"></button>
<!-- 缩写 -->
<button @click="doThis"></button>
<!-- 动态事件缩写 (2.6.0+) -->
<button @[event]="doThis"></button>
<!-- 停止冒泡 -->
<button @click.stop="doThis"></button>
<!-- 阻止默认行为 -->
<button @click.prevent="doThis"></button>
<!-- 阻止默认行为,没有表达式 -->
<form @submit.prevent></form>
<!-- 串联修饰符 -->
<button @click.stop.prevent="doThis"></button>
<!-- 键修饰符,键别名 -->
<input @keyup.enter="onEnter">
<!-- 键修饰符,键代码 -->
<input @keyup.13="onEnter">
<!-- 点击回调只会触发一次 -->
<button v-on:click.once="doThis"></button>
<!-- 对象语法 (2.4.0+) -->
<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>
按键修饰符
<form>
<div>
<!-- 按删除键删除用户名 -->
<input type="text" v-model="username" v-on:keyup.delete="clear">
</div>
<div>
<!-- 按回车直接提交 -->
<input type="password" v-on:keyup.enter="submit" v-model="password">
</div>
<div>
<input type="submit" @click="submit" value="登录">
</div>
</form>
属性绑定
<a v-bind:href="url">百度</a>
<!--url: ‘http://www.baidu.com‘-->
缩写
<a :href="url">百度</a>
绑定class影响样式
<!-- active类名 isActive控制是否显示标志 -->
<div :class="{active : isActive}"></div>
<div :class="[active,err]"></div>
<div :class="[{active : isActive},err]"></div>
使用与angular类似
v-if 与 v-show区别
遍历数组
<ul>
<li v-for="(item, index) in fruits" :key="index" v-text="item +‘----‘+ index"></li>
</ul>
遍历对象(value,key,index)顺序固定
<div v-for="(f, key,index) in fruit">{{f + ‘----‘ +key + ‘----‘ + index}}</div>
v-if 和 v-for结合
<li v-if="item==‘apple‘"v-for="(item, index) in fruits" :key="index" v-text="item +‘----‘+ index"></li>
抽取复杂的计算逻辑
与方法的区别:
<div id="example">
<p>Original message: "{{ message }}"</p>
<p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
el: ‘#example‘,
data: {
message: ‘Hello‘
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// `this` 指向 vm 实例
return this.message.split(‘‘).reverse().join(‘‘)
}
}
})
mounted:页面渲染完毕,此时调用后台接口
原文:https://www.cnblogs.com/erkye/p/12825202.html