今日份分享内容:

效果展示:


所以需要添加v-html属性:

运行效果展示:

三种属性绑定值:
value 直接输出值
v-bind:value 引用定义的变量值
:value 引用定义的变量值
任意属性都可以引用定义的变量值

运行效果展示:

Vue提供了完全的JavaScript表达式支持
截取字段: substring
数值增加:+
三元运算符: ?_:_
字符串拼接: +
如图所示:

效果展示:

有两种方式:
①使用id标签(.)/ 类标签(#)

效果展示:

②调用 定义的变量值
这里注意的是,我们引用的自定义变量的值也是从前面定义的id标签里来的!

效果展示:
6、style绑定
:style

效果展示:
代码块展示:
- html>
- <html>
- <head>
- <meta charset="utf-8">
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
- <title>1、插值title>
- <style>
- .a{
- color: yellow;
- }
- style>
- head>
- <body>
-
- <div id="app">
- <p>文本插值p>
- {{msg}}<br/>
- <p>html页面转义p>
- <div v-html="htmlstr">div><br/>
- <p>v-bind 属性绑定p>
- <input value="值" /><br/>
- <input v-bind:value="aa" /><br/>
- <input :value="aa" />
- <p>vue中可以对变量进行二次处理(也可使用js语法)p>
- {{bb.substring(0,4)}}<br />
- {{cc + 4}}<br />
- {{dd ? '1':'0'}}<br />
- <span :id="ee + '1' ">书籍信息span>
- <p>class样式绑定p>
- <span class="a">我是一杯咖啡span>
- <span :class="ff">我是一杯咖啡span>
- <span :style="gg" >我是红色的咖啡span>
- div>
- body>
- <script type="text/jscript">
- /* 实例化一个vue */
- new Vue({
- el:"#app",
- data(){
- return{
- msg:"hello vue! 我是一杯咖啡",
- htmlstr:'文本内容',
- aa:'我是aa',
- bb:'hello world',
- cc:6,
- dd:false,
- ee:'book_',
- ff:'a',
- gg:'color:red;'
- }
- }
- })
- script>
- html>
指的是带有“v-”前缀的特殊属性
v-if|v-else|v-else-if:根据其后表达式的bool值进行判断是否渲染该元素,
他们只能是兄弟元素
v-else-if上一个兄弟元素必须是v-if
v-else上一个兄弟元素必须是v-if或者是v-else-if

效果展示:




面试题:
v-show与v-if的区别?
v-show与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"。


遍历数组: v-for="item in items", items是数组,item为数组中的数组元素(可自定义变量名)
遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标
下拉框模式:

效果展示:

多选框模式:

效果展示:

代码块展示:
- html>
- <html>
- <head>
- <meta charset="utf-8">
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
- <title>1、插值title>
- head>
- <body>
-
- <div id="app">
- <p>v-ifp>
-
- 请输入分数:<input v-model="score" />
- 对应的结果:
- <span v-if="score<60">不及格span>
- <span v-else-if="score<70">合格span>
- <span v-else-if="score<80">良span>
- <span v-else-if="score<90">优秀span>
- <span v-else-if="score<=100">优+span>
- <span v-else="">输入不合法span>
- <p>v-showp>
- 请输入结果:<input v-model="showflag" />
- <span v-show="showflag">show:展示与否span>
- <p>v-forp>
- <select>
- <option v-for="l in likes" :value="l.id">{{l.name}}option>
- select><br />
- <div v-for="l in likes" >
- <input type="checkbox" :value="l.id">{{l.name}}
- div>
- div>
- body>
- body>
- <script type="text/jscript">
- /* 实例化一个vue */
- new Vue({
- el:"#app",
- data(){
- return{
- score:0,
- showflag:false,/* 默认值为false */
- likes:[
- {id:1,name:'深夜网易云'},
- {id:2,name:'冲浪达人'},
- {id:3,name:'追剧达人'},
- {id:4,name:'梗王'}
- ]
- }
- }
- })
- script>
- html>

在过滤器中也可以进行截取:
效果展示:

过滤器的串联:同时运行两个过滤器

效果展示:

代码块展示:
- html>
- <html>
- <head>
- <meta charset="utf-8">
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
- <title>1、插值title>
- head>
- <body>
-
- <div id="app">
- <p>过滤器p>
- {{msg|strSplit|strSplit2}}
- div>
- body>
- body>
- <script type="text/jscript">
- /* 过滤器 */
- Vue.filter('strSplit',function(value){
- debugger;
- console.log(value);
- return value.substring(2,6);
- })
- Vue.filter('strSplit2',function(value){
- debugger;
- console.log(value);
- return value.substring(2,3);
- })
- /* 实例化一个vue */
- new Vue({
- el:"#app",
- data(){
- return{
- msg:'hello vue! 我是一杯咖啡'
- }
- }
- })
- script>
- html>
计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新

效果展示:
当我任意输入一个数字的时候:

监听属性 watch,我们可以通过 watch 来响应数据的变化

效果展示:
默认值为0时:
设置值时:

代码块展示:
- html>
- <html>
- <head>
- <meta charset="utf-8">
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
- <title>4、计算属性与监听属性title>
- head>
- <body>
-
- <div id="app">
- <p>计算属性p>
- 请输入第一个数:<input v-model="x" /><br>
- 请输入第二个数:<input v-model="y" /><br>
- 结果为:{{addFlag}}
- <p>监听属性p>
- 请输入第km数:<input v-model="km" /><br>
- 请输入第m数:<input v-model="m" /><br>
- div>
- body>
- body>
- <script type="text/jscript">
- /* 实例化一个vue */
- new Vue({
- el:"#app",
- data(){
- return{
- // 设置默认值
- x:0,
- y:0,
- km:0,
- m:0
- }
- },computed:{
- // 计算属性
- addFlag:function(){
- return parseInt(this.x) + parseInt(this.y)
- }
- },watch:{
- km:function(v){
- // :(冒号)之前对应的是被监听的属性,v指的是被监听属性的值
- // 当v对弈的值发生变化的时候,会执行这个方法
- // v代表的是km
- // km = m*1000
- this.m = parseInt(v)*1000
- },
- m:function(v){
- // m = km/1000
- this.km = parseInt(v)/1000;
- }
- }
- })
- script>
- html>
计算属性:一方影响另一方
监听属性:相互影响
小结:计算属性和监听属性的区别
自己的理解
computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理;
computed比较适合对多个变量或者对象进行处理后返回一个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化,
举例:购物车里面的商品列表和总金额之间的关系,只要商品列表里面的商品数量发生变化,或减少或增多或删除商品,总金额都应该发生变化。这里的这个总金额使用computed属性来进行计算是最好的选择。
与watch之间的区别:
刚开始总是傻傻分不清到底在什么时候使用watch,什么时候使用computed。这里大致说一下自己的理解:
watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象,
那么对比一下,我们很容易得出computed(计算属性)和watch(监听属性)都存在缓存机制的,性能都处优先选择,那么这两者哪个更好呢?
上述很容易得出监听属性比计算属性复杂的多!因此在一个项目同时可以使用计算属性,methods和监听属性实现时候我们优先使用计算属性其次是监听属性,最后选择methods!
- html>
- <html>
- <head>
- <meta charset="utf-8">
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
- <title>1、插值title>
- <style>
- .a{
- color: yellow;
- }
- style>
- head>
- <body>
-
- <div id="app">
- <table >
- <tr>
- <td>物品td>
- <td>单价td>
- <td>数量td>
- <td>小计td>
- tr>
- <tr>
- <td>帽子td>
- <td>
- {{maozidanjia}}
- td>
- <td>
- <input v-model="maozishuliang" />
- td>
- <td>{{moazixiaoji}}td>
- tr>
- <tr>
- <td>衣服td>
- <td>
- {{yifudanjia}}
- td>
- <td>
- <input v-model="yifushuliang" />
- td>
- <td>{{yifuxiaoji}}td>
- tr>
- <tr>
- <td>裤子td>
- <td>
- {{kuzidanjia}}
- td>
- <td>
- <input v-model="kuzishuliang" />
- td>
- <td>{{kuzixioaji}}td>
- tr>
- <tr>
- <td>总价{{zongjia}}td>
- <td colspan="3">td>
- tr>
- table>
- div>
- body>
- <script type="text/jscript">
- /* 实例化一个vue */
- new Vue({
- el:"#app",
- data(){
- return{
- maozidanjia:20,
- yifudanjia:299,
- kuzidanjia:199,
- maozishuliang:1,
- yifushuliang:1,
- kuzishuliang:1
- }
- },computed:{
- // 因为数量 会影响小计,小计不会影响数量,所以使用计算属性
- moazixiaoji:function(){
- return parseInt(this.maozidanjia) * parseInt(this.maozishuliang);
- },yifuxiaoji:function(){
- return parseInt(this.yifudanjia) * parseInt(this.yifushuliang);
- },kuzixioaji:function(){
- return parseInt(this.kuzidanjia) * parseInt(this.kuzishuliang);
- },zongjia:function(){
- return parseInt(this.yifuxiaoji) + parseInt(this.moazixiaoji) + parseInt(this.kuzixioaji);
- }
- }
- })
- script>
- html>
效果展示:
更改数量之后:
