学习Vue日记第二天

v-on指令

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>

<body>
    <div id="app">
        <p>{{msg}}</p>
        <button v-on:click="showInfo">请单击</button>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                msg: '单击查看此内容'
            },
            methods: {
                showInfo () {
                    this.msg = '123'
                }
            }
        })
    </script>
</body>

</html>

v-for指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <div v-for="(item,key) in list" data-id="key">
            索引是:{{key}},元素内容:{{item}}
        </div>
    </div>
    <script>
        var vm=new Vue({
            el:'#app',
            data: {
                list: [1,2,4]
            }
        })
    </script>
</body>
</html>

v-if指令
v-if重新创建v-show是显示隐藏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <div v-if="isShow" style="background-color:#ccc;">我是v-if</div>
        <button @click="isShow=!isShow">显示/隐藏</button>
    </div>
    <script>
        var vm=new Vue({
            el:'#app',
            data:{
                isShow:'true'
            }
        })
    </script>
</body>
</html>

学生列表案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <button @click="add">添加学生</button>
        <button @click="del">删除学生</button>
        <table border="1" width="50%" style="border-collapse: collapse">
            <tr>
                <th>班级</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
            </tr>
            <tr align="center" v-for="item in students">
                <td>{{item.grade}}</td>
                <td>{{item.name}}</td>
                <td>{{item.gender}}</td>
                <td>{{item.age}}</td>
            </tr>
        </table>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                students: []
            },
            methods: {
                //添加学生信息
                add () {
                    var student = { grade: '1', name: 'cc', gender: 'nan', age: 22 };
                    this.students.push(student)
                },
                //删除学生信息
                del () {
                    this.students.pop()
                }
            }
        })
    </script>
</body>

</html>

v-on允许触发事件时执行JavaScript代码
随机数案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <button v-on:click="count+=Math.random()" >随机数</button>
        <p>随机数是{{count}}</p>
    </div>
    <script>
        var vm=new Vue({
            el:'#app',
            data:{
                count:0
            },
            methods:{
                submit(){
                    count=1
                }
            }
        })
    </script>
</body>
</html>

keyup.enter按键修饰符监听按键
回车按键

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app">
        <input type="text" v-bind:value="skt" v-on:keyup.enter="submit">
        <hr/>
        <p>{{skt}}</p>
    </div>
    <script>
        var vm =new Vue({
            el:'#app',
            data:{
                skt:'123'
            },
            methods:{
                submit(){
                    this.skt='cuowu'
                }
            }
        })
    </script>
</body>
</html>

事件修饰符
.stop阻止事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <div v-on:click="doParent">
            <button v-on:click="doThis">时间冒泡</button>
            <button v-on:click.stop="doThis">阻止时间冒泡</button>
        </div>
    </div>
    <script>
        var vm=new Vue({
            el:'#app',
            methods:{
                doParent(){
                    console.log('父类单击事件')
                },
                doThis(){
                    console.log('子类单击事件')
                }
            }
        })
    </script>
</body>
</html>

.prevent阻止默认行为

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <a href="https://www.baidu.com" v-on:click.prevent>阻止默认行为</a>
        <a href="https://www.baidu.com" >不阻止默认行为</a>
    </div>
    <script>
        var vm=new Vue({
            el:'#app'
        })
    </script>
</body>
</html>

.capture事件捕获

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app">
        <div v-on:click.capture="doParent">
        <button v-on:click="doThis">事件捕获</button>
        </div>
    </div>
    <script>
        var vm=new Vue({
            el:'#app',
            methods:{
                doParent(){
                    console.log('fu')
                },
                doThis(){
                    console.log('zi')
                }
            }
        })
    </script>
</body>
</html>

.self自身触发和.once触发一次

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <div class="Odiv1" v-on:click.self="doParent">a
            <div class="Odiv2" v-on:click="doThis">b</div>
        </div>
        <!-- 只执行一次 -->
        <div class="Odiv1" v-on:click.once="doParent">c
            <!-- 被单击执行 -->
            <div class="Odiv2" v-on:click.self.stop="doThis">d</div>
        </div>
    </div>
    <script>
        var vm=new Vue({
            el:'#app',
            methods:{
                doParent(){
                    console.log('fu')
                },
                doThis(){
                    console.log("danji")
                }
            }
        })
    </script>
</body>
</html>
<style>
    .Odiv1{width: 80px;height: 80px;background: #aaa;margin: 5px;}
    .Odiv2{width: 50px;height: 50px;background: #ccc;}
</style>

Vue组件
案例:多个按钮单击计算次数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app">
        <my-component></my-component>
        <my-component></my-component>
        <my-component></my-component>
    </div>
    <script>
        // 创建组件
        Vue.component('my-component',{
            data(){
                return {
                    count:0
                }
            },
            template:'<button v-on:click="count++">被单击{{count}}次</button>'
        }
        )
        var vm=new Vue({el:'#app'})
    </script>
</body>
</html>

局部注册组件component

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <my-component></my-component>
    </div>
    <script>
    var com1={
        template:'<p>我是vm实例中局部组件</p>'
    }
    var vm=new Vue({
        el:'#app',
        //注册局部组件
        components:{ myComponent:com1}
    })
    </script>
</body>
</html>

template模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <p>{{title}}</p> 
        <hr/>
        <!-- 这是实现的 -->
        <my-component></my-component>
    </div>
    <template id="tmp1">
        <p>{{title}}</p>
    </template>
    <script>
        Vue.component('my-component',{
            template:'#tmp1',
            data(){
                return {
                    title:'我是组件内的title'
                }
            }
        })
        var vm=new Vue({
            el:'#app',
            data:{
                title:'我是vm实例中的title'
            }
        })
    </script>
</body>
</html>

prop传值子类接收父类

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>

<body>
    <div id="app">
        <my-parent name="title"></my-parent>
    </div>
    <template id="template1">
        <div>我是父组件{{name}}</div>
    </template>
<script>
    Vue.component('my-parent',{
        template:'#template1',
        props:['name'],        
    })
    var vm=new Vue({el:'#app'})
</script>
</body>

</html>

$emit传值子类传父类

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <parent></parent>
    </div>
    <template id="child">
        <div>
            <hr />
            <button @click="click">send</button>
            <input type="text" v-model="message">
        </div>
    </template>
    <script>
        Vue.component('parent', {
            template: '<div><child @childFn="transContent"></child>'+'子组件传来的值:{{message}}</div>',
            data() {
                return {
                    message: '11'
                }
            },
            methods: {
                transContent(payload) {
                    this.message = payload
                }
            }
        })
        Vue.component('child', {
            template: '#child',
            data() {
                return {
                    message: '我是子组件的消息'
                }
            },
            methods: {
                click() {
                    this.$emit('childFn', this.message);
                }
            }
        })
        var vm = new Vue({ el: '#app' })
    </script>
</body>

</html>

组件切换
v-if实现

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <a href="#" @click.prevent="flag?flag:flag=!flag">登录</a>
        <a href="#" @click.prevent="flag?flag=!flag:flag">注册</a>
        <login v-if="flag"></login>
        <register v-else="flag"></register>
    </div>
    <template id="login">
        <div>登录界面</div>
    </template>
    <template id="register">
        <div>注册界面</div>
    </template>
    <script>
        Vue.component('login', {
            template: '#login'
        })
        Vue.component('register', {
            template: '#register'
        })
        var vm = new Vue({
            el: '#app',
            data: {
                flag: true
            }
        })
    </script>
</body>

</html>

is属性实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <a href="#" @click.prevent="comName='login'">登录</a>
        <a href="#" @click.prevent="comName='register'">注册</a>
        <component v-bind:is="comName"></component>
    </div>
    <template id="login">
        <div>登录界面</div>
    </template>
    <template id="register">
        <div>注册界面</div>
    </template>
    <script>
         Vue.component('login', {
            template: '#login'
        })
        Vue.component('register', {
            template: '#register'
        })
        var vm = new Vue({
            el: '#app',
            data: {
                comName: ''
            }
        })
    </script>
</body>
</html>

加油!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值