欢迎光临散文网 会员登陆 & 注册

v-model双向绑定,{{}}报错,HBulider和VScode使用vue指令,v-bind:class【诗书画唱】

2021-05-14 21:39 作者:诗书画唱  | 我要投稿


目录:


例子1:在Vscode中用v-bind:class来控制是否使用class对应的css样式(ture就是使用,false就是不使用)


firstVue.vue

index.js


例子2:使用{{}}打印出以下表达式的值:

data:{

    i:3,

    j:4,

    stu:{

        name:'张三',

        age:18

    },

    msg:'apple'

}




显示i+j的和

显示张三

如果age大于等于18就显示成人,如果小于18就显示未成年

显示msg的长度

显示msg中下标为3的字符



个人解析首先题目中的data是对象,这个通常是HBuilder中使用的写法(Vscode中的data是函数,是写成data()的),所以我在HBuilder中做这道题

{{}}使用的作业.html


例子3:页面上有一个多选框按钮,点击这个按钮就显示一个图片,取消点击则显示另外一个图片


页面上有一个多选框按钮,点击这个按钮就显示一个图片,取消点击则显示另外一个图片.html


v-model="isUse"表示是否使用双向绑定

v-bind:class="{'caoZuo2':isUse}"表示

当isUse为true时,class='caoZuo1'会被class="caoZuo1 caoZuo2"取代,或者说是覆盖,

会有class='caoZuo2'的效果。caoZuo:是"操作"的意思。


例子4:data中有一个user对象,如果user.name有值,就显示购物车按钮,如果没有值就显示登录按钮(在vscode中完成)

ZuJian1.vue

index.js

代码:

{{}}中的表达式.html

v-bind指令.html

v-for指令.html


 v-for是用来遍历的, v-for="val in stu"这种方式只能遍历出属性值,

v-for="(val,key) in stu"可以遍历出key和属性值。



v-if指令.html


 v-if, v-else在

<div v-if="visible">欢迎登录</div>

<div v-else>不可见</div>等类似的代码中,有进行条件判断的作用。

v-model指令.html

v-model可以进行双向绑定(我个人认为v-model很好用,以后可能会常常用。一般我认为好用的,以后会常常用,并且可能也记忆得更牢固一些),也就是被双向绑定的2个标签中的内容会一起跟着改变,是可以互相影响对方的,任意一方的内容改变,如果另一方不动,另一方就会随之发生改变。

v-model.number就是双向绑定中,使用v-model.number的input中如果先输非数字,那么可以继续输入数字和非数字,仍然有双向绑定的效果。但是如果一开始输入数字,有双向绑定的效果,后输入非数字,输入非数字时没有双向绑定的效果,之后无论输入非数字还是数字都仍然没有双向绑定的效果。


第一个VUE程序.html

个人写的代码解析.html


不要用num++,因为这个是修改变量的值了,会导致组件循环渲染等等,

   进而报You may have an infinite update loop in a component render function,

   在组件呈现函数中可能有一个无限更新循环。

   的错误。可能是因为 data类似于state状态机,如果变量改变,就会多次渲染。

  每次渲染时会渲染整个HTML的代码等等,后面渲染到 <p>{{num+1}}</p>这个部分,因为

变量改变了,所以会重头渲染整个HTML的代码等等,又会渲染到 <p>{{num+1}}</p>这个部分,不同

的循环,后面为什么会到num=100左右就停止呢?因为到100左右的时候就是内存已经消耗光,溢出了,

所以浏览器会报错 。

   

  

 以下就是修改变量的值了,不要像下面那样写。

  <p>{{num=num+1}}</p>

<p>{{num++}}</p>

<p>{{typeof(num++)}}</p>




{{}}:外面的花括号是说:我这里面写的是js语句

内部的花括号是说:我里面的不是要显示的文字,而是变量,我要把变量的值解析放在这



v-html="sshc"中的sshc是js部分的new Vue中的内容为HTML代码的变量的名字。

  <p v-html="sshc"></p>的意思是把sshc的HTML内容,内嵌和渲染到<p></p>里面。

科普(知识普及)

Vue/React中出现两个花括号的原因



Vue: scoped 样式与 CSS Module的区别,




例子1:在Vscode中用v-bind:class来控制是否使用class对应的css样式(ture就是使用,false就是不使用)



firstVue.vue

<template>

    <div v-bind:class="{'bg': isUser}">{{msg}}</div>

</template>

<script>

export default {

    data() {

        return {

            msg: '我的第一个vue程序',

            isUser: true

        }

    }

}

</script>

<style scoped>

.bg {

    width: 100px;

    height: 100px;

    background-color: pink;

}

</style>




index.js


import Vue from 'vue'

import Router from 'vue-router'

import HelloWorld from '@/components/HelloWorld'

//自己加入的必须加载和要使用组件的代码 START


import firstVue from '@/components/firstVue'


//自己加入的必须加载和要使用组件的代码 END


Vue.use(Router)


export default new Router({

  routes: [

   

    //http://localhost:8080/#/firstVue

    {

      path: '/firstVue',

      name: 'firstVue',//路由跳转时使用

      component: firstVue//记得写加载要使用的这个组件的代码

    }

    ,

    //自己加的代码 END

  ]

})

//解决重复点击路由,界面跳转等时报错的代码 START

const originalPush = Router.prototype.push

Router.prototype.push = function push (location) {

  return originalPush.call(this, location).catch(err => err)

}


//解决重复点击路由,界面跳转等时报错的代码 END

我这里组件首字母没有大写也可以运行,但最好以后首字母大写地命名组件





例子2:使用{{}}打印出以下表达式的值:

data:{

    i:3,

    j:4,

    stu:{

        name:'张三',

        age:18

    },

    msg:'apple'

}




显示i+j的和

显示张三

如果age大于等于18就显示成人,如果小于18就显示未成年

显示msg的长度

显示msg中下标为3的字符



个人解析:首先题目中的data是对象,这个通常是HBuilder中使用的写法(Vscode中的data是函数,是写成data()的),所以我在HBuilder中做这道题


{{}}使用的作业.html


<!DOCTYPE html>

<html>


<head>

<meta charset="UTF-8">

<title></title>

<script type="text/javascript" srcc="js/vue.js"></script>

</head>


<body>

<div id="app">

显示i+j的和:

<p>{{i+j}}</p>


显示张三:

<p>{{stu.name}}</p>


如果age大于等于18就显示成人,如果小于18就显示未成年:

<p>{{stu.age>=18? '成人' : '未成年'}}</p>


显示msg的长度:

<p>{{msg.length}}</p>


显示msg中下标为3的字符:

<p>{{msg[3]}}</p>


</div>

<script>

new Vue({

el: '#app',

data: {


i: 3,


j: 4,


stu: {


name: '张三',


age: 18


},


msg: 'apple'


}


});

</script>

</body>


</html>




例子3:页面上有一个多选框按钮,点击这个按钮就显示一个图片,取消点击则显示另外一个图片


页面上有一个多选框按钮,点击这个按钮就显示一个图片,取消点击则显示另外一个图片.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<style type="text/css">



.caoZuo1 {

display: none;

}

.caoZuo2 {

display: block;

}

</style>

<script type="text/javascript" srcc="js/vue.js" ></script>

</head>

<body>

<div id="app">

<!--v-model="isUse"表示是否使用双向绑定

v-bind:class="{'caoZuo2':isUse}"表示

当isUse为true时,class='caoZuo1'会被class="caoZuo1 caoZuo2"取代,或者说是覆盖,

会有class='caoZuo2'的效果。caoZuo:是"操作"的意思。

-->

<input type="checkbox" name="item"  v-model="isUse">显示图片         

          <img v-bind:src="path"  class='caoZuo1'  v-bind:class="{'caoZuo2':isUse}"/>

      

</div>

<script>

new Vue({

el: '#app',

data: {


path: 'img/GOSICK4.jpg',

                     isUse: false

}

});

</script>

</body>

</html>




例子4:data中有一个user对象,如果user.name有值,就显示购物车按钮,如果没有值就显示登录按钮(在vscode中完成)


ZuJian1.vue

<template>

  


   <div >

       user.name!=null的结果:

       {{user.name!=''}}


<div  v-html="buy_car_button" class='caoZuo1' 

 v-bind:class="{'caoZuo2': user.name!=null&&user.name!=''?true:false}"></div> 


 

<div  v-html="login_button"   class='caoZuo1' 

 v-bind:class="{'caoZuo2': user.name!=null&&user.name!=''?false:true}"></div>


   </div>


</template>

<script>

export default {

    data() {

        return {

            user: {name:"诗书画唱"},

           buy_car_button:"<input type='button' value='购物车'>",

           login_button:"<input type='button' value='登录按钮'>"

        }

    }

}

</script>


/* 个人理解:


css 样式天生又是全局性的,所以到最后总是极容易地就发生样式冲突——要么是样式相互覆盖。


用<style scoped></style>可以使得我们的样式只被应用到被作用的组件中的元素上。*/ 


<style type="text/css">

            

            

            .caoZuo1 {

                display: none;

            }

            .caoZuo2 {

                display: block;

            }

        </style>





index.js


import Vue from 'vue'

import Router from 'vue-router'

import HelloWorld from '@/components/HelloWorld'

//自己加入的必须加载和要使用组件的代码 START


import ZuJian1 from '@/components/ZuJian1'


//自己加入的必须加载和要使用组件的代码 END


Vue.use(Router)


export default new Router({

  routes: [

   

    //http://localhost:8080/#/ZuJian1


    {

      path: '/ZuJian1',

      name: 'ZuJian1',//路由跳转时使用

      component: ZuJian1//记得写加载要使用的这个组件的代码

    }

    ,

    //自己加的代码 END

  ]

})

//解决重复点击路由,界面跳转等时报错的代码 START

const originalPush = Router.prototype.push

Router.prototype.push = function push (location) {

  return originalPush.call(this, location).catch(err => err)

}


//解决重复点击路由,界面跳转等时报错的代码 END

终端中输入npm run dev,按回车键后:


http://localhost:8080/#/ZuJian1



http://localhost:8080/#/ZuJian1



代码:





{{}}中的表达式.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script type="text/javascript" srcc="js/vue.js" ></script>

</head>

<body>

<div id="app">

<p>{{message}}</p>

<!-- 会直接显示Html文本 -->

<p>{{ctx}}</p>

<!-- 通过v-html指令可以直接解析为html标签 -->

<p v-html="ctx"></p>

<p>{{flag ? 'On' : 'Off'}}</p>

<p>{{5 * num}}</p>

</div>

<script>

new Vue({

el: '#app',

data: {

message: '这是我的第一个vue程序',

ctx: '<input type="button" value="点击" />',

flag: true,

num: 5

}

});

</script>

</body>

</html>


v-bind指令.html


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<style type="text/css">

.bg {

width: 100px;

height: 100px;

background-color: pink;

}

</style>

<script type="text/javascript" srcc="js/vue.js" ></script>

</head>

<body>

<div id="app">

<div v-bind:class="{'bg':isUser}"></div>

<a v-bind:href="url">跳转到百度</a>

<img v-bind:src="path" />

<input v-bind:type="t" value="测试"/>

</div>

<script>

new Vue({

el: '#app',

data: {

isUser:true,

url: 'http://www.baidu.com',

path: 'img/GOSICK4.jpg',

t: 'text'

}

});

</script>

</body>

</html>



v-for指令.html



 v-for是用来遍历的, v-for="val in stu"这种方式只能遍历出属性值,

v-for="(val,key) in stu"可以遍历出key和属性值。




<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script type="text/javascript" srcc="js/vue.js" ></script>

</head>

<body>

<div id="app">

<ol>

<li v-for="p in pros">

<a href="#">{{p.pn}}</a>价格:{{p.price}}

</li>

</ol>

<ul>

<!-- 这种方式只能拿到属性值 -->

<li v-for="val in stu">

{{val}}

</li>

<!-- key和属性值都要拿到 -->

<li v-for="(val,key) in stu">

{{key}}:{{val}}

</li>

</ul>

</div>

<script>

new Vue({

el: '#app',

data: {

pros: [

    {pn: '凤爪',price: 4.7},

    {pn: '巧克力',price: 8.5},

    {pn: '果冻',price: 10.5}

],

stu: {

name: 'Tom',

age: 18,

sex: '男'

}

}

});

</script>

</body>

</html>



v-if指令.html


 v-if, v-else在

<div v-if="visible">欢迎登录</div>

<div v-else>不可见</div>等类似的代码中,有进行条件判断的作用。



<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script type="text/javascript" srcc="js/vue.js" ></script>

</head>

<body>

<div id="app">

<div v-if="visible">欢迎登录</div>

<div v-else>不可见</div>


<div v-if="score >=90 && score <= 100">优秀</div>

<div v-else-if="score < 90 && score >= 80">良好</div>

<div v-else-if="score < 80 && score >= 70">一般</div>

<div v-else-if="score < 70 && score >= 60">及格</div>

<div v-else>不及格</div>

</div>

<script>

const vue = new Vue({

el: '#app',

data: {

visible: false,

score: 100

}

});

</script>

</body>

</html>




v-model指令.html


v-model可以进行双向绑定(我个人认为v-model很好用,以后可能会常常用。一般我认为好用的,以后会常常用,并且可能也记忆得更牢固一些),也就是被双向绑定的2个标签中的内容会一起跟着改变,是可以互相影响对方的,任意一方的内容改变,如果另一方不动,另一方就会随之发生改变。

v-model.number就是双向绑定中,使用v-model.number的input中如果先输非数字,那么可以继续输入数字和非数字,仍然有双向绑定的效果。但是如果一开始输入数字,有双向绑定的效果,后输入非数字,输入非数字时没有双向绑定的效果,之后无论输入非数字还是数字都仍然没有双向绑定的效果。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<style type="text/css">

.bg {

width: 100px;

height: 100px;

background-color: pink;

}

</style>

<script type="text/javascript" srcc="js/vue.js" ></script>

</head>

<body>

<div id="app">

<h1>{{msg}}</h1>

<!-- 修改msg属性,会导致输入文本框中的值跟着变化 

  修改输入文本框中的值,会导致msg属性也跟着发生变化  -->

<input type="text" v-model.number="msg"/>

<label>同意</label><input type="checkbox" v-model="isAgree" />

<div v-bind:class="{'bg':isAgree}"></div>

</div>

<script>

new Vue({

el: '#app',

data: {

msg: 'admin',

isAgree: true

}

})

</script>

</body>

</html>




第一个VUE程序.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<script type="text/javascript" srcc="js/vue.js" ></script>

</head>

<body>

<div id="ctx"><h1>{{msg}},{{name}}</h1></div>

<script>

new Vue({

el: '#ctx',

data: {//页面中需要使用的一些数据

msg: 'Hello world',

name: '张三'

}

})

</script>

</body>

</html>



个人写的代码解析.html


<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>诗书画唱这个up主好有才!(runoob.com)</title>

<!--<script src="https://unpkg.com/vue/dist/vue.js"></script>-->

<script srcc="js/vue.js"></script>

</head>

<style>

.active {

    width: 100px;

    height: 100px;

    background: green;

}

.text-danger {

    background: red;

}

</style>

<body>

<div id="app">


<!--{{}}:外面的花括号是说:我这里面写的是js语句

内部的花括号是说:我里面的不是要显示的文字,而是变量,我要把变量的值解析放在这-->

  <p>{{ message }}</p>

  

  <p v-html="sshc"></p>

  

  <!--v-html="sshc"中的sshc是js部分的new Vue中的内容为HTML代码的变量的名字。

  <p v-html="sshc"></p>的意思是把sshc的HTML内容,内嵌和渲染到<p></p>里面。-->

  

  

  

  <p>{{ flag?'给三连':'点赞 '}}</p>

 

     <p>{{typeof(num)}}</p>

       <p>{{num}}</p>

       

    <p>{{num+1}}</p>

  

<!--不要用num++,因为这个是修改变量的值了,会导致组件循环渲染等等,

   进而报You may have an infinite update loop in a component render function,

   在组件呈现函数中可能有一个无限更新循环。

   的错误。可能是因为 data类似于state状态机,如果变量改变,就会多次渲染。

  每次渲染时会渲染整个HTML的代码等等,后面渲染到 <p>{{num+1}}</p>这个部分,因为

变量改变了,所以会重头渲染整个HTML的代码等等,又会渲染到 <p>{{num+1}}</p>这个部分,不同

的循环,后面为什么会到num=100左右就停止呢?因为到100左右的时候就是内存已经消耗光,溢出了,

所以浏览器会报错 。

   

  

 以下就是修改变量的值了,不要像下面那样写。

  <p>{{num=num+1}}</p>

<p>{{num++}}</p>

<p>{{typeof(num++)}}</p>-->

   

    <div class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }">

   

    <p>{{bangDing2}}</p>

     

    <input  v-model="bangDing2"   value={{bangDing2}}/>

  </div>

</div>


<script>

new Vue({

  el: '#app',

  data: {

    message: '诗书画唱这个up主好有才!要给他的作品三连!',

    sshc:'<button>诗书画唱</button>',

    flag:true,

    num:1,

    

     isActive: true,

    hasError: true,

    bangDing2:"双向绑定"

  }

})

</script>

</body>

</html>




科普(知识普及)

Vue/React中出现两个花括号的原因


{{}}:外面的花括号是说“我这里面写的是js语句”,

内部的花括号是说“我里面的不是要显示的文字,而是变量,我要把变量的值解析放在这”






Vue: scoped 样式与 CSS Module的区别,


v-model双向绑定,{{}}报错,HBulider和VScode使用vue指令,v-bind:class【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律