当前位置 : 主页 > 网页制作 > html >

三.Vue的使用

来源:互联网 收集:自由互联 发布时间:2021-06-12
目录 三.Vue的使用 1.vue成员获取($options的使用) 2.原义指令v-pre 3.v-for循环指令 4.to_list案例 5.v-slot插槽指令 三.Vue的使用 1.vue成员获取($options的使用) !DOCTYPE htmlhtmlhead meta charset="utf-8" title

目录

  • 三.Vue的使用
    • 1.vue成员获取($options的使用)
    • 2.原义指令v-pre
    • 3.v-for循环指令
    • 4.to_list案例
    • 5.v-slot插槽指令

三.Vue的使用

1.vue成员获取($options的使用)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <div id="app">
        <h1 @click="btnClick">{{ msg }}</h1>
        <p>{{ 10 | add }}</p>
        <p>{{ $data }}</p>
        <p>{{ $options.arr }}</p>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    let app = new Vue({
        el: '#app',
        data: {
            msg: '数据',
            a: 1,
            b: 2,
        },
        methods: {
            btnClick() {
                console.log(this.msg)
            }
        },
        filters: {
            add(v) {
                return v+1
            }
        },
        arr: [1, 2, 3, 4],
    });

    console.log(app.msg);
    console.log(app.$data);
    console.log(app.$options.methods);
    console.log(app.$options.arr);
</script>
</html>

2.原义指令v-pre

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <div id="app">
        <div v-pre>
            <!--v-pre的内部解除vue控制-->
            <!--{{}}不是插值表达式,msg不是变量,v-on不是指令,都是原义输出-->
            <p>{{ msg }}</p>
            <span v-on="abc"></span>
        </div>

    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: "message"
        }
    })
</script>
</html>

3.v-for循环指令

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <div id="app">
        <p>{{ arr }}</p>
        <p>
            <span>{{ arr[0] }}</span>
            <span>{{ arr[1] }}</span>
            <span>{{ arr[2] }}</span>
            <span>{{ arr[3] }}</span>
            <span>{{ arr[4] }}</span>
        </p>
        <div>
            <!--值 遍历-->
            <p v-for="v in arr">
                <span>{{ v }}</span>
            </p>
        </div>
        <div>
            <!--值,索引 遍历-->
            <p v-for="(v, i) in arr">
                <span>第{{ i + 1 }}个值:{{ v }}</span>
            </p>
        </div>
        <p>{{ student }}</p>
        <div>
            <p v-for="(v, k, i) in student">
                <span>{{ k, v, i | f1 }}</span>
            </p>
        </div>
        <div>
            <!--页面渲染格式:
            name: Bob | age:18 | gender:男
            name: Tom | age:1 | gender:男
            -->
            <p v-for="stu in stus">
                <!--<span v-for="(v, k, i) in stu">{{i?' | ':''}}{{k}}:{{v}}</span>-->
                <span v-for="(v, k, i) in stu">{{i|f2}}{{k}}:{{v}}</span>
            </p>
        </div>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            arr: [1, 4, 2, 3, 5],
            student: {
                'name': 'Bob',
                'age': 18,
                'gender': '男'
            },
            stus: [
                {
                    'name': 'Bob',
                    'age': 18,
                    'gender': '男'
                },
                {
                    'name': 'Tom',
                    'age': 20,
                    'gender': '男'
                }
            ]
        },
        filters: {
            f1(k, v, i) {
                // return k + ":" + v + '(' + i + ')'
                // el表达式:${},常用于获取后台传递的数据
                return `${k}:${v}(${i})`
            },
            f2(i) {
                // i为0代表假,返回'',其它索引时返回' | '
                return i ? ' | ' : ''
            }
        }
    })
</script>
</html>

4.to_list案例

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>todolist</title>
    <style>
        li:hover {
            color: red;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="app">
        <p>
            <input type="text" v-model="info">
            <button @click="addMsg">留言</button>
            <ul>
                <li v-for="(msg, i) in msgs" @click="delFn(i)">{{ msg }}</li>
            </ul>
        </p>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            info: '',
            // msgs: ['11111', '22222'],
            // msgs: sessionStorage.msgs && JSON.parse(sessionStorage.msgs) || [],
            // sessionStorage存放数组和字典需要JSON字符串参与
            msgs: JSON.parse(sessionStorage.msgs || '[]'),
        },
        methods: {
            addMsg() {
                let info = this.info;
                if (info) {
                    // this.msgs.push(this.info);  // 尾增
                    this.msgs.unshift(this.info);  // 首增
                    // 清空留言框
                    this.info = '';
                    sessionStorage.msgs = JSON.stringify(this.msgs);//同步
                }
            },
            delFn(i) {
                //删除留言
                this.msgs.splice(i, 1);
                sessionStorage.msgs = JSON.stringify(this.msgs);//同步
            }
        }
    })
</script>
</html>

5.v-slot插槽指令

#简化了父子组件的信息交互
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>插槽指令</title>
    <style>
        body {
            font-size: 30px;
        }
        li:hover {
            color: orange;
            cursor: pointer;
        }
        .del:hover {
            color: red;
        }
    </style>
</head>
<body>
    <div id="app">
        <p>
            <input type="text" v-model="info">
            <button @click="add_msg">留言</button>
            <ul>
                <msg-tag :msg="msg" v-for="(msg, i) in msgs" :key="msg">
                    <!--template通过v-slot绑定子组件内部slot插槽标签的name属性值-->
                    <template v-slot:del_btn>
                        <span @click="del_fn(i)" class="del">x</span>
                    </template>
                </msg-tag>
            </ul>
        </p>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    let msgTag = {
        props: ['msg'],
        template: `
        <li>
            <slot name="del_btn"></slot>
            <span>{{ msg }}</span>
        </li>
        `,
    };


    new Vue({
        el: '#app',
        components: {
            msgTag
        },
        data: {
            info: '',
            msgs: JSON.parse(sessionStorage.msgs || '[]'),
        },
        methods: {
            add_msg() {
                let info = this.info;
                if (info) {
                    this.msgs.unshift(this.info);
                    this.info = '';
                    sessionStorage.msgs = JSON.stringify(this.msgs);
                }
            },
            del_fn(index) {
                console.log(index);
                this.msgs.splice(index, 1);
                sessionStorage.msgs = JSON.stringify(this.msgs);
            }
        }
    });
</script>
</html>
上一篇:form表单
下一篇:四.Vue成员
网友评论