vue指令

作者: 她与星河皆遗憾 | 来源:发表于2019-07-05 08:29 被阅读0次

    数据的双向绑定:v-model

    <body>
            <div id="app">
                <p>{{msg}}</p>
                <!-- v:bind:只能实现数据的单向绑定 -->
                <input type="text" v-bind:value="msg">
                <!-- v:model:可以实现表单元素和Model中数据的双向绑定 -->
                <!-- 只能运用在表单元素中 -->
                <input type="text" v-model="msg">
            </div>
            <script type="text/javascript">
                // 创建一个vue实例,这个实例,即VM
                var vm = new Vue({
                    el : '#app',
                    data : {
                        msg : '大家一起玩vue'
                    },
                    methods:{
                        
                    }
                })
            </script>
        </body>
    

    通过绑定class赋予样式

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script type="text/javascript" src="../js/vue.js"></script>
            <style>
                .red{
                    color: red;
                }
                .active{
                    font-size: 20px;
                }
                .weight{
                    font-weight: bold;
                }
            </style>
        </head>
        <body>
            <div id="app">
                <!-- 第一种方式:直接传递一个数组,注意:这里的class需要使用v-bind做数据绑定 -->
                <p :class="['red','active','weight']">p标签,样例文本</p>
                <!-- 在数组中使用三元运算符,提高代码可读性 -->
                <!-- 类名red,active的单引号可以省略,flag是data中的数据 -->
                <p :class="[{'red':flag,'active':flag}]">p标签,样例文本</p>
                <!-- 另一种方式 -->
                <p :class="styles">p标签,样例文本</p>
            </div>
            <script type="text/javascript">
                var vm = new Vue({
                    el: '#app',
                    data: {
                        flag : true,
                        styles : {'red':true,'active':true}
                    },
                    methods: {}
                })
            </script>
        </body>
    </html>
    

    使用内联样式

    <body>
            <div id="app">
                <!-- 第一种方式:直接绑定,注意:font-weight中有'-'号,必须加单引号 -->
                <h1 :style="{color:'red','font-weight':'100'}">这是一个h1标签</h1>
                <!-- 第二种方式:直接绑定 -->
                <h1 :style="styleObj1">这是一个h1标签</h1>
                <!-- 第三种方式:使用数组 -->
                <h1 :style="[styleObj1,styleObj2]">这是一个h1标签</h1>
            </div>
            <script type="text/javascript">
                var vm = new Vue({
                    el: '#app',
                    data: {
                        styleObj1 : {color:'red','font-weight':200},
                        styleObj2 : {'font-size':'50px'}
                    },
                    methods: {}
                })
            </script>
        </body>
    

    v-for

    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script type="text/javascript" src="../js/vue.js"></script>
        </head>
        <body>
            <div id="app">
                <!-- 想使用索引值时,使用括号,里面的i即是索引 -->
                <p v-for="(item,i) in list">{{i}}--{{item}}</p>
                <!-- 遍历对象数组 -->
                <p v-for="(user,i) in listObj">{{i}}--{{user.id}}--{{user.name}}</p>
                <!-- 遍历对象,注意:括号中第一个参数是value值,第二个是key值 -->
                <!-- 此处的i也是索引,但用处不大 -->
                <p v-for="(val,key,i) in user">{{val}}--{{key}}--{{i}}</p>
                <!-- 放数字,代表循环次数,count默认从1开始 -->
                <p v-for="count in 10">这是第{{count}}次循环</p>
            </div>
            <script type="text/javascript">
                var vm = new Vue({
                    el: '#app',
                    data: {
                        list:['a','b','c','d','e','f'],
                        listObj:[
                            {id:101,name:'张三'},
                            {id:102,name:'李四'},
                            {id:103,name:'王五'},
                            {id:104,name:'赵六'}
                        ],
                        user:{
                            id : 1001,
                            name : '大力',
                            gender:'男'
                        }
                    },
                    methods: {}
                })
            </script>
        </body>
    </html>
    

    v-for中的使用问题

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script type="text/javascript" src="../js/vue.js"></script>
        </head>
        <body>
            <div id="app">
                <div>
                    <label>
                        <!-- 双向绑定id -->
                        Id : <input type="text" v-model="id">
                    </label>
                    <label>
                        <!-- 双向绑定name -->
                        Name : <input type="text" v-model="name">
                    </label>
                    <!-- 绑定触发函数add -->
                    <button type="button" @click="add">添加</button>
                </div>
                <p v-for="item in list">
                    <input type="checkbox" name="namelist">
                    {{item.id}} ---- {{item.name}}
                </p>
            </div>
            <script type="text/javascript">
                var vm = new Vue({
                    el: '#app',
                    data: {
                        id : '',
                        name : '',
                        list : [
                            {id:1,name:'关羽'},
                            {id:2,name:'吕布'},
                            {id:3,name:'张飞'},
                            {id:4,name:'刘备'},
                            {id:5,name:'曹操'}
                        ]
                    },
                    methods: {
                        /*
                            向list中添加对象,即文本输入框中的id和name,
                            这里如果使用unshift从起始位置存入list就会在
                            选中某一个选项并添加新的节点时,出现bug
                        */
                        add(){
                            // this.list.push({id:this.id,name:this.name})
                            this.list.unshift({id:this.id,name:this.name})
                        }
                    }
                })
            </script>
        </body>
    </html>
    

    解决方式

    <!-- 注意:v-for循环的时候,key属性只能使用number或String -->
    <!-- 注意:key在使用的时候,必须使用v-bind绑定 -->
    <!-- 在一些特殊情况下,如在组件中,如果v-for时有问题,必须指定唯一的字符串/数字 :key值 -->
    <p v-for="item in list" :key="item.id">
        <input type="checkbox" name="namelist">
        {{item.id}} ---- {{item.name}}
    </p>
    

    v-if和v-show

    <body>
            <div id="app">
                <button type="button" @click="toggle">切换</button>
                <!-- v-if特点:每次都会重新删除或创建元素,如果需要频繁的切换,不推荐使用 -->
                <!-- v-show特点:每次不会重新进行DOM的删除和创建,只是切换了display样式 -->
                <!-- v-if 有较高的切换性能消耗 -->
                <!-- v-show 有较高的初始渲染消耗 -->
                <h3 v-if="flag">这是v-if控制元素</h3>
                <h3 v-show="flag">这是v-show控制元素</h3>
            </div>
            <script type="text/javascript">
                var vm = new Vue({
                    el: '#app',
                    data: {
                        flag :true
                    },
                    methods: {
                        toggle(){
                            this.flag = !this.flag;
                        }
                    }
                })
            </script>
        </body>
    

    相关文章

      网友评论

          本文标题:vue指令

          本文链接:https://www.haomeiwen.com/subject/rsikhctx.html