码迷,mamicode.com
首页 > 其他好文 > 详细

Vue的介绍以及说明(二)

时间:2019-10-19 11:13:53      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:建立   lis   har   解析   com   set   系统   delete   bbb   

一,循环指令代码展示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>循环指令</title>
    <script src="js/vue.js"></script>
</head>
<body>

<div id="app">
    <div>{{ arr }}</div>

    <ul>
        <li>{{ arr[0] }}</li>
        <li>{{ arr[1] }}</li>
        <li>{{ arr[2] }}</li>
    </ul>
    <hr>
    <!--        循环指令:v-for='ele in 容器变量'  -->
    <!--        数组的循环-->
    <ul>
        <li v-for="s in arr">{{ s }}</li>
    </ul>
    <hr>
    <!--       key属性是vue的属性,表示为该标签在内存中建立缓存的依据 -->
    <ul>
        <li v-for="(s,i) in arr" :key="s" b="b">第{{ i }}个:{{ s }}</li>
    </ul>

    <!--        对象的循环,直接拿到的是value值-->
    <ul>
        <li v-for="v in person">{{ v }}</li>
    </ul>

    <!--        对象循环之直接拿到key-->
    <ul>
        <li v-for="(v,k) in person">{{ k }}</li>
    </ul>
    <hr>
    <!--        对象循环之,直接拿到key,value,索引-->
    <ul>
        <li v-for="(v,k,i) in person">{{ k }}:{{ v }}:{{ i }}</li>
    </ul>
    <hr>
<!--    对象循环之,拿到数组套字典的key,value以及索引,再格式化渲染-->
    <p v-for="stu in students">
            <span v-for="(v,k,i) in stu">
                <b>{{ k }}:{{ v }}</b>
                <b v-if="i != 1"> | </b>
            </span>
    </p>

</div>

</body>
<script>

    new Vue({
        el: '#app',
        data: {
            arr: ['aaa', 'bbb', 'ccc'],
            person: {
                'name': 'andy',
                'age': 18,
                'sex': 'meal'
            },
            students: [
                {
                    name: 'andy',
                    age: 17
                },
                {
                    name: 'tank',
                    age: 18
                },
                {
                    name: 'jason',
                    age: 17
                }


            ]
        }
    })

</script>

</html>

二,todolist案例简单实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>todolist案例</title>
    <script src="js/vue.js"></script>
    <style>
        li:hover {
            cursor: pointer;
            color: green;
        }

    </style>
</head>
<body>

    <div id="app">
        <input type="text" v-model="msg_val">
        <!--绑定事件-->
        <button @click="sendmsg">留言</button>
        <ul>
            <!--拿到数组中的元素和索引值,并绑定事件,传入索引值-->
            <li v-for="(msg,index) in msgs" @click="deletemsg(index)">{{ msg }}</li>
        </ul>
    </div>

</body>
<script>

    new Vue ({
        el:'#app',
        data:{
            msgs:[],
            msg_val:''
        },
        methods:{
            sendmsg () {
                //1)数据为空直接结束函数
                if (!this.msg_val) return;
                
                //2)数据添加到留言数组中,往尾巴添加
                // this.msgs.push(this.msg_val);
                
                //2.1)数据添加,从头部添加
                this.msgs.unshift(this.msg_val);
                
                //3)清空输入框
                this.msg_val = '';

            },
            //拿到数组当前元素的索引值
            deletemsg (index) {
                //操作索引值,执行删除
                this.msgs.splice(index,1)


            }
        }
    })

</script>

</html>

三,插值表达式符号修改

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>插值表达式之符号修改</title>
</head>
<body>
<!--    主要用途是解决模版语言冲突--->
    <div id="app">
        <!--失效--->
        <p>{{ msg }}</p>
        <!--生效--->
        <p>{[ msg]}</p>
    </div>

</body>
<script src="js/vue.js"></script>

<script>

    new Vue({
        el: '#app',
        data:{
            msg:'xx'
        },
        delimiters:['{[',']}']
    })

</script>

</html>

四,监听多个变量代码实现,以及简单案例实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监听多个变量</title>
</head>
<body>

    <div id="app">
        <input type="text" v-model="val1">
        <input type="text" v-model="val2">
        <input type="text" v-model="val3">
        <p> {{ val_fn }} </p>
    </div>

</body>
<script src="js/vue.js"></script>

<script>

    new Vue({
        el: '#app',
        data: {
            val1: '',
            val2: '',
            val3: '',
        },
        //内部书写的是方法,管理可以监听多个变量的方法
        //1)方法名可以直接作为变量名被渲染,值为方法的返回值
        //2)在方法名被渲染后,就是说在页面中使用了,都会被监听
        //3)用来解决一个变量值依赖多个变量值
        computed: {
            val_fn() {
                // this.val1;
                // this.val2;
                // this.val3;
                console.log('被触发了,老弟');
                return this.val1 + this.val2 + this.val3
            }
        }
    })

</script>

</html>

4.1监听多个变量简单案例实现
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>案例实现</title>
</head>
<body>

    <div id="app">
        姓:<input type="text" v-model="last_name">
        名: <input type="text" v-model="first_name">
        <p>姓名:{{ name }}</p>
    </div>

</body>
<script src="js/vue.js"></script>

<script>

    new Vue({
        el: '#app',
        data:{
            last_name:'',
            first_name:''
        },
        computed:{
            name () {
                return this.last_name + '' + this.first_name
            }
        }

    })

</script>

</html>

五.监听单个变量,将单个变量拆分成多个变量的案例实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监听单个变量</title>
</head>
<body>

    <div id="app">
        <p>姓名: <input type="text" v-model="name"></p>
        <p>姓:<input type="text" v-model="last_name"></p>
        <p>名:<input type="text" v-model="first_name"></p>
        
    </div>

</body>
<script src="js/vue.js"></script>

<script>

    new Vue({
        el: '#app',
        data:{
            name:'',
            last_name:'',
            first_name:''
        },
        //watch内部书写方法, 监听绑定的属性(必须存在)的方法
        //方法名就是被监听的变量名
        //用来解决多个变量值依赖一个变量值
        watch:{
            name () {
                //name 变量值改变,要完成的任何逻辑都可以书写在此方法中
                let names = this.name.split(' ');
                this.last_name = names[0];
                this.first_name = names[1]
            }
        }
    })

</script>

</html>

六.何为组件之组件解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>组件介绍</title>
</head>
<body>

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

</body>
<script src="js/vue.js"></script>

<script>
    //1. new Vue 创建的实例就是组件,一个vue实例就是一个组件,new出了的实例称为根组件
    //注意:在实际开发中一个页面中只有一个根组件
    //2.每个组件均有html模版,css样式,js逻辑组成
    // html模版:template
    //挂载点是必须作为虚拟DOM渲染替换点依据,挂载点可以读取,作为根组件点模版。使用根组件无需书写template
    //3.组件分为根组件,全局组件,局部组件
        //根组件:所有被new Vue() 产生的组件
        //全局组件:不需要注册,就可以成为任何一个组件的子组件
        //局部组件:必须注册,才能成为注册该局部组件的子组件

    new Vue({
        el: '#app',
        data:{
            msg:'app-msg',
            c1:'blue'
        },
        template:`
        <div :style="{color:c1}" @click="fn">{{ msg }}</div>
        `,
        methods:{
            fn () {
                alert(this.msg)
            }
        }
    });
</script>

</html>

七.局部组件代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>局部组件</title>
    <style>
        .box {
            box-shadow: 0 3px 5px 0;
            width: 240px;
            height: 300px;
            text-align: center;
            padding:20px 0;
            float: left;
            margin: 5px;
        }
        .box img {
            width: 200px;
        }

    </style>
</head>
<body>

    <div id="app">
    <!-- //3.在父组件的template模版中渲染该局部组件-->
        <local-tag></local-tag>
        <local-tag></local-tag>
        <local-tag></local-tag>
        <local-tag></local-tag>
        <local-tag></local-tag>
        <local-tag></local-tag>
    </div>

</body>
<script src="js/vue.js"></script>

<script>
    //创建局部组件的步骤
    //1.创建局部组件
    let localTag = {
        template: `
        <div class="box">
        <img src="img/1.jpg" alt="">
        <h3>一路向北</h3>
        <p>周杰伦</p>
        </div>
        `
    };

    new Vue({
        el: '#app',
    //2.在父组件中注册该局部组件
        components:{
            localTag
        }

    })

</script>

</html>

八.全局组件代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>全局组件</title>
    <style>
        .box {
            box-shadow: 0 3px 5px 0;
            width: 200px;
            height: 200px;
            text-align: center;
            padding: 20px 0;
            float: left;
            margin: 5px;
        }
        .box img {
            width: 200px;
        }
        .hovers:hover{
            cursor:pointer;

        }
    </style>
</head>
<body>

    <div id="app">
        <global-tag></global-tag>
        <global-tag></global-tag>
        <global-tag></global-tag>
    </div>

</body>
<script src="js/vue.js"></script>

<script>

    //1.创建全局组件
    Vue.component('global-tag',{
        //在父组件的template模版中直接渲染该全局组件
        template:`
        <div class="box">
            <img src="img/2.jpg" alt="">
            <h3>不该</h3>
            <p>周杰伦 <span class="hovers" @click="action">??</span>{{ num }}</p>
        </div>
        `,
        data () {
            return {
                num:0
            }
        },
        methods: {
            action () {
                this.num++;
            }
        }

    });

    new Vue({
        el: '#app'
    })

</script>

</html>

九.组件之间的交互之父传子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>组件交互-父传子</title>
    <style>
        .info {
            text-align: center;
            width: 200px;
            height: 320px;
            box-shadow: 0 3px 5px 0 blueviolet;
            float: left;
            margin: 5px;
        }
        .info img {
            width: 200px;
        }
    </style>
</head>
<body>

    <div id="app">
        <info v-for="info in infos" :key="info.image" :myinfo="info"></info>
    </div>

</body>
<script src="js/vue.js"></script>

<script>

    let infos = [

        {
            image:'img/1.jpg',
            title:'安静',
            desc:'.....'
        },
        {
            image: 'img/2.jpg',
            title:'搁浅',
            desc:'.....'

        },
        {
            image:'img/3.jpg',
            title:'发如雪',
            desc:'.....'

        }

    ];
    //创建局部组件
    let info = {
        template:`
        <div class="info">
            <img :src="myinfo.image" alt="">
            <p><b>{{ myinfo.title }}</b></p>
            <p><b>{{ myinfo.desc }}</b></p>
        </div>
        `,
        //在子组件实例中,通过props实例成员获得自定义属性
        props:['myinfo']
    };
    //数据交互- 父传子 - 是通过绑定属性的方式
    //1.父组件提供数据
    //2.在父组件模版中,为子组件标签设置自定义属性,绑定的值是由父组件提供的
    //3.在子组件实例中,通过props实例成员获得自定义属性
    new Vue({
        el: '#app',
        //局部组件,在父组件中注册
        components:{
            info,
        },
        data:{
            //for循环局部组件中的容器
            infos,
        }
    })

</script>

</html>

十.组件之间交互之子传父

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>组件交互-子传父</title>
    <style>
        .close:hover {
            cursor:pointer;
            color: red;
        }
    </style>
</head>
<body>

    <div id="app">
        <p>
            <input type="text" v-model="userMsg">
            <button @click="sendMsg">留言</button>
        </p>
        <ul>
            <msg-li @remove_msg="removeAction" v-for="(msg,index) in msgs" :msg="msg" :index="index" :key="msg"></msg-li>
        </ul>
    </div>

</body>
<script src="js/vue.js"></script>

<script>
    //创建局部组件
    let msgLi = {
        template:`
            <li>
                <span class="close" @click="deleteMsg(index)">X</span>
                <span>{{ msg }}</span>
            </li>
        `,
        //自定义属性
        props:['msg','index'],
        methods:  {
            //系统的click事件
            deleteMsg(index) {
                this.$emit('remove_msg',index);
                this.$emit('myclick')
            }
        }
    };
    //组件交互-子传父
    //1.数据由子组件提供
    //2.子组件内部通过触发系统事件。发送一个自定义事件,将数据携带出来
    //3.父组件为子组件标签的自定义属性通过方法实现,就可以通过参数拿到子组件传递处理的参数
    new Vue({
        el: '#app',
        data:{
            msgs:[],
            userMsg:''
        },
        methods: {
            sendMsg () {
                if (this.userMsg) {
                    //增加留言
                    this.msgs.unshift(this.userMsg);
                    //增加后的留言去除在输入框中
                    this.userMsg = '';
                }
            },
            removeAction(index) {
                this.msgs.splice(index,1)
            }
        },
        //注册局部组件
        components:{
            msgLi
        }
    })

</script>

</html>

Vue的介绍以及说明(二)

标签:建立   lis   har   解析   com   set   系统   delete   bbb   

原文地址:https://www.cnblogs.com/cody-wu/p/11703203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!