vue之day02 style和class 条件渲染 列表渲染之购物车 v-for循环变量 key之解释和数组的检测与更新 v-model,input事件 事件处理之事件修饰符

一:style和class的使用

1.通过属性指令来控制class 和 style

2.class可以是:字符串,数组(用的多),对象

3.class的使用

  • 推荐使用数组
    <style>
        .red{
            background-color: red;
            font-size: 40px;
        }

        .green{
            background-color: green;
            font-size: 80px;
        }

        .yellow{
            background-color: yellow;
        }
        .size{
            font-size: 100px;
        }

        .pink{
            background-color: pink;
        }
    </style>
</head>
<body>
    <div class="app">
        <button @click="handleClick">点我变化</button>
        <hr>
        <div :class="class_obj2">
            hahaha
        </div>
    </div>
</body>
<script>
    new Vue({
        el: '.app',
        data: {
            class_obj: 'red',
            class_obj1: 'yellow size',
            class_arrary: ['yellow',],  // 数组
            class_obj2: {'pink': true, 'size': false}  // 对象
        },
        methods:{
            handleClick(){
                // this.class_obj='green'
                // 数组
                // this.class_arrary.push('size')
                // 对象
                this.class_obj2['size'] = true
            },
        }
    })
</script>

4.style的使用

  • 可以是:字符串,数组,对象

  • 推荐使用对象

<div :class="" :style="style_obj">
            hahaha
        </div>
<button @click="handleClick3">点我变色</button>
style_str:'font-size: 300px; background-color: chartreuse',
            style_array:[{'font-size': '90px'}, {'backgroundColor': 'green'}],
            style_obj: {'font-size': '30px', 'backgroundColor': 'yellow'}
 handleClick3(){
                // this.style_obj['backgroundColor'] = 'pink'
                this.style_obj['font-size'] = '100px'
                },

二:条件渲染

v-if
v-else-if
v-else
<body>
    <div class="app">
        <p v-if="score>90">优秀</p>
        <p v-else-if="score>60 && score<90">良好</p>
        <p v-else>不及格</p>
    </div>
</body>
<script>
    vm = new Vue({
        el: '.app',
        data: {
            score: 80,
        }
    })
</script>

三:列表渲染之购物车

for 循环
v-for='item in 数组/对象/数字'

四:v-for循环变量

可以循环:数字,字符串,数组,对象

<body>
    <div class="app">
        <div>
            <h1>数字</h1>
            <p v-for="item in num">{{item}}</p>
            <h1>字符串</h1>
            <p v-for="item in str">{{item}}</p>
            <h1>数组</h1>
            <p v-for="(item, index) in list1">第{{index}}个是:{{item}}</p>
            <h1>对象</h1>
            <p v-for="(value, key) in object">{{key}}:{{value}}</p>
        </div>

    </div>
</body>
<script>
    var vm = new Vue({
        el: '.app',
        data: {
            num: 10,
            str: 'hello world ha ha ha',
            list1: [1,2,3,4,5,6],
            object: {name: 'zhao', age: 20}
        }
    })
</script>

五:key值解释和数组的检测与更新

1.如果要加key属性,一定要设置成唯一的

2.功能:提高页面刷新速度(提高虚拟dom的刷新速度)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">

    <h1>数组的检测与更新</h1>
    <button @click="handleClick">点我追加女生</button>
    |
    <button @click="handleClick1">点我追加一批女生</button>|
    <button @click="handleClick4">点我修改数组页面变化</button>|
    <p v-for="girl in girls">{{girl}}</p>

    <h1>对象的检测与更新</h1>
    <button @click="handleClick2">点我追加身高</button>
    |
    <button @click="handleClick3">点我追加身高--解决</button>
    |
    <p v-for="(value,key) in obj">{{key}}---{{value}}</p>


</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            girls: ['刘亦菲', '迪丽热巴', '杨超越', '刘诗诗'],
            obj: {'name': 'lqz', age: 19}
        },
        methods: {
            handleClick() {
                this.girls.push('美女1号')
            },
            handleClick1() {
                var a = this.girls.concat(['美女99号', '美女88号', '美女77号'])
                console.log(a)
            },
            handleClick2() {
                this.obj.height = '180'  // 监控不到变化
                console.log(this.obj)
            },
            handleClick3() {
               Vue.set(this.obj,'height',180)  // 监控到变化了
            },
            handleClick4(){
                Vue.set(this.girls,0,'sdasdfas')
            }
        }
    })


</script>
</html>

3.数组的检测与更新

  • 使用场景:我们用一些数组,对象的方法更新数据或对象的时候,发现页面没有变化,可以使用下面的两种方式
Vue.set(要改的值, key, value)
handleClick() {
    vm.$set(vm.obj, 'xx', 'uu')
    Vue.set(vm.obj, 'gender', '未知')
}

六:v-model,input事件,过滤案例

1.v-model
<div class="app">
        <h1>v-model</h1>
        <input type="text" v-model="name"> >>>>>>>>>>{{name}}

    </div>
</body>

<script>
    var vm = new Vue({
        el: '.app',
        data: {
            name: ''
        }
    })
</script>
2.input的事件
 # 只要输入就触发:input
 <p><input type="text" v-model="name1" @input="handleClick1">-------->{{name1}}</p>
 # 发生变化才触发:change
 <p><input type="text" v-model="name2" @change="handleClick2">-------->{{name2}}</p>
 # 贯标移走就会触发:blur
 <p><input type="text" v-model="name3" @blur="handleClick3">-------->{{name3}}</p>

过滤案例

<body>
    <div class="app">
        <h1>过滤案例</h1>
        <p><input type="text" v-model="myText" @input="handleClick"></p>
        <hr>
        <p v-for="item in newList">{{item}}</p>
    </div>
</body>
<script>
    var vm = new Vue({
        el: '.app',
        data: {
            myText: '',
            dataList: ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf'],
            newList: ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf']
        },
        methods: {
            handleClick(){
                var _this=this
                this.newList=this.dataList.filter(item =>{
                    // if(item.indexOf(_this.myText)>=0){
                    //     return true
                    // }else {
                    //     return false
                    // }

                    // 方法2
                    return item.indexOf(this.myText) >= 0
                })
            }
        }
    })
</script>
    // 数组的过滤方法
    var l = ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf']
    var ll = l.filter(function (item) {
        return false  
    })
    
    // 判断子字符串是否在字符串中  大于等于0表示在
    var name='qq'
    var s='hahah qq is '
    var res=s.indexOf(name)
    console.log(res)
    // 箭头函数
    // var l = ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf']
    // var ll = l.filter(item => {
    //     return false
    // })

七:事件处理之事件修饰符

修饰符功能
.stop只处理自己的事件,阻止冒泡事件的发生
.self只处理自己的事件,子控冒泡事件不处理
.prevent阻止a链接的跳转
.once事件只会触发一次(适用于抽奖页面)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一个流行的前端框架,提供了一种简单而强大的方式来处理动态渲染页面。v-forVue.js 中最常用的指令之一,用于循环渲染列表数据。下面我们就来详解一下 Vue.js 中的 v-for 指令。 ## v-for 指令 v-for 指令可以循环渲染一个数组或对象的属性,它的语法格式如下: ```html <div v-for="(item, index) in items" :key="index">{{ item }}</div> ``` 上面的代码中,items 是一个数组v-for 指令会将数组中的每个元素渲染成一个 div 元素。在循环过程中,item 和 index 分别表示数组的元素和索引。 其中,:key 是必须的属性,用于给每个渲染出的元素指定一个唯一的标识符,以便 Vue.js 能够跟踪每个元素的状态变化。 在 v-for 指令中,还可以使用对象的属性进行循环渲染: ```html <div v-for="(value, key) in object" :key="key">{{ key }}: {{ value }}</div> ``` 上面的代码中,object 是一个对象,v-for 指令会将对象的每个属性渲染成一个 div 元素。在循环过程中,value 和 key 分别表示对象的属性值和属性名。 ## v-for 嵌套 在 Vue.js 中,v-for 指令可以嵌套使用,实现更复杂的渲染效果。例如,可以循环渲染一个二维数组: ```html <div v-for="row in matrix" :key="row[0]"> <div v-for="cell in row" :key="cell">{{ cell }}</div> </div> ``` 上面的代码中,matrix 是一个二维数组v-for 指令会将每一行渲染成一个 div 元素,然后在每行中再循环渲染每个元素,即每个单元格渲染成一个 div 元素。 ## v-for 和 v-if 结合使用 在 Vue.js 中,v-for 指令和 v-if 指令可以结合使用,实现更灵活的渲染效果。例如,可以根据条件过滤渲染的元素: ```html <div v-for="item in items" v-if="item.visible" :key="item.id">{{ item.name }}</div> ``` 上面的代码中,items 是一个数组v-for 指令会将数组中的每个元素渲染成一个 div 元素。在渲染过程中,只有 visible 属性为 true 的元素才会被渲染。 ## 总结 v-for 指令是 Vue.js 中常用的指令之一,用于循环渲染列表数据。在使用 v-for 指令时,需要注意给每个渲染出的元素指定一个唯一的标识符,以便 Vue.js 能够跟踪每个元素的状态变化。另外,v-for 指令还可以嵌套使用,实现更复杂的渲染效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值