VUE-基础使用

一、

插值表达式{{}}、v-text、v-html都可以获取变量的值,并将其赋值给界面元素。其中,插值表达式可以在变量前后插入其他内容,v-text会直接替换元素里的内容,v-html则可以渲染html代码。 

另外,v-cloak是一个指令,用于防止界面闪烁。在Vue加载之前,v-cloak存在于元素上,Vue加载结束后,v-cloak会被隐藏,从而防止闪烁。

二、

v-bind指令用于将Vue实例的数据绑定到视图层的属性上,你提供了一个很好的例子。在Vue控制下的界面元素中使用该指令可以动态地更新属性值,而不需要手动修改DOM(文档对象模型)。当然,在示例中的代码中很明显,这里给出一些扩充:

1. :class 语法糖

:class是v-bind:class的缩写形式,用于方式中应用对某个类进行操作。

例如,我们有如下数据绑定:

data: {
    hasError: true
}

那么就可以通过以下代码片段来设置红色文字样式:

<div v-bind:class="{error: hasError}"></div>

其中,error指定了CSS中对应样式的名称。

2. 绑定 style 对象

我们也可以使用 v-bind 来直接绑定一个样式对象。注意:CSS 属性名可以使用驼峰式(camelCase)或短横线分隔命名(kebab-case),具体取决于您是否希望在 JavaScript 中访问属性 (camelCase) 还是在模板中访问 (kebab-case)。

例如:

<div v-bind:style="{ color: activeColor }"></div>

activeColor 是从 data 中取得的一个字符串。现在这个样式会被应用到这个 div 中,直到 activeColor 发生改变。

三、事件修饰符

  1. .stop 阻止冒泡
  2. .prevent 阻止默认事件
  3. .capture 添加事件侦听器时使用事件捕获模式
  4. .self 只当事件在该元素本身(比如不是子元素)触发时触发回调
  5. .once 事件只触发一次              

    <style>

        .box {

            height: 200px;

            background-color: green;

        }

        .sub-box {

            height: 100px;

            background-color: red;

        }

    </style>

</head>

<body>

    <div id="app">

        <div class="box" @click='clickBox'>

            <button @click.stop='clickBtn'>点我</button>

        </div>

        <a href="http://www.baidu.com" @click.prevent='clickA'>baidu</a>

        <h1>capture事件修饰符</h1>

        <div class="box" @click='clickBox'>

            <div class="sub-box" @click.capture='clickSubBox'>

                <button @click='clickBtn'>事件捕获</button>

            </div>

        </div>

        <h1>self事件修饰符</h1>

        <div class="box" @click='clickBox'>

            <div class="sub-box" @click.self='clickSubBox'>

                <button @click='clickBtn'>事件捕获</button>

            </div>

        </div>

        <button @click.once='clickBtn'>once</button>

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

    <script>

        var vm = new Vue({

            el: '#app',

            data: {},

            methods: {

                clickBox() {

                    console.log('点击了盒子')

                },

                clickBtn() {

                    console.log('点击了按钮');

                },

                clickA() {

                    console.log('点击了a标签')

                },

                clickSubBox() {

                    console.log('点击了sub box')

                }

            },

        })

    </script>

四、v-model数据双向绑定

  1. 作用:数据双向绑定
  2. 注意:绑定的是表单控件

<body>

    <div id='app'>

        <input type="text" v-model:value='value1'>

        <select v-model:value='opration'>

            <option value="+">+</option>

            <option value="-">-</option>

            <option value="*">*</option>

            <option value="/">/</option>

        </select>

        <input type="text" v-model:value='value2'>

        <button @click='calc'>=</button>

        <input type="text" v-model:value='result'>

    </div>

</body>

<script>

    var vm = new Vue({

        el: '#app',

        data: {

            value1: '',

            value2: '',

            opration: '+',

            result: ''

        },

        methods: {

            calc() {

                switch (this.opration) {

                    case '+':

                        this.result = Number.parseFloat(this.value1) + Number.parseFloat(this.value2);

                        break;

                    case '-':

                        this.result = Number.parseFloat(this.value1) - Number.parseFloat(this.value2);

                        break;

                    case '*':

                        this.result = Number.parseFloat(this.value1) * Number.parseFloat(this.value2);

                        break;

                    case '/':

                        this.result = Number.parseFloat(this.value1) / Number.parseFloat(this.value2);

                        break;

                }

            }

        }

    })

</script>

五、Vue中样式的使用

  1. 数组
  2. 三木表达式
  3. 数组内置对象(对象的键是样式的名字,值是Boolean类型)
  4. 直接通过对象
  5. 直接在元素上通过 :style 的形式,书写样式对象
  6. 将样式对象,定义到 data 中,并直接引用到 :style 中
    1. 在data上定义样式
    2. 在元素中,通过属性绑定的形式,将样式对象应用到元素中
  7. 在 :style 中通过数组,引用多个 data 上的样式对象
    1. 在data上定义样式
    2. 在元素中,通过属性绑定的形式,将样式对象应用到元素中

  <style>

        .first {

            color: red;

        }

        .second {

            font-size: 25px;

           

        }

    </style>

</head>

<body>

    <div id='app'>

        <!-- 使用多个class -->

        <p class="first second">这是一段文字</p>

        <!-- 使用变量指定class,根据flag值动态添加class -->

        <p :class="[pClass,flag?'second':'']">这是一段文字</p>

        <!-- 使用对象指定class,根据flag值添加或删除second class -->

        <p :class="[pClass,{'second':flag}]">这是一段文字</p>

        <!-- 直接指定class名添加或删除first/second class -->

        <p :class="{'first':false,'second':true}">这是一段文字</p>

        <!-- 使用内联样式1 -->

        <div :style="{'font-size':'32px'}">{{message}}</div>

        <!-- 使用内联样式2 -->

        <div :style="textStyle">{{message}}</div>

        <!-- 同时使用多个内联样式 -->

        <div :style="[textStyle,textStyle2]">{{message}}</div>

        <!-- 使用方法动态返回样式对象 -->

        <div :style="getStyle(2)">{{message}}</div>

    </div>

    <!-- 创建Vue实例 -->

    <script>

        var vm = new Vue({

            el: '#app',   // 挂载元素

            // 数据

            data: {

                message: 'Hello Vue!',

                pClass: 'first',

                flag: true,

                textStyle: {

                    color: 'red',

                    'font-size': '50px'

                },

                textStyle2: {

                    'font-weight': '600'

                }

            },

            // 方法

            methods: {

                getStyle(num) {

                    let obj = {

                        color: 'red',

                        'font-size': '50px'

                    };

                    if (num == 1) {

                        obj.color = 'red'

                    } else {

                        obj.color = 'green'

                    }

                    return obj

                }

            }

        })

    </script>

六、V-for和key属性

  1. 遍历数组,参数(item,index) in list
  2. 遍历对象,参数(value,key,index) in list
  3. 遍历数字,num in 10 (1~10)
  4. key在使用v-for的时候都需要去设置key
  1. 让界面元素和数组里的每个记录进行绑定
  2. key只能是字符串或者数字
  3. key必须是唯一的

<body>

    <div id="app">

        <ul>

            <li v-for="(item,index) in list">{{item.name}}数组的下标{{index}}</li>

        </ul>

        <h1>迭代对象</h1>

        <ul>

            <li v-for="(value,key,index) in user">对象的键:{{key}},对象的值:{{value}},数组的下标{{index}}</li>

        </ul>

        <h1>迭代数字</h1>

        <ul>

            <li v-for="num in 10">你好</li>

        </ul>

        <h1>v-for的key</h1>

        <button @click='add'>add</button>

        <ul>

            <li v-for='(item,index) in list' :key='item.id'><input type="checkbox"> {{item.name}}数组的下标{{index}}

            </li>

        </ul>

    </div>

    <script>

        var vm = new Vue({

            el: '#app',

            data: {

                message: 'Hello Vue!',

                user: { userId: 19, name: '测试name', age: 18 },

                list: [

                    { id: 1, name: '张三1' },

                    { id: 2, name: '张三2' },

                    { id: 3, name: '张三3' },

                    { id: 4, name: '张三4' },

                    { id: 5, name: '张三5' }

                ]

            },

            methods: {

                add() {

                    this.list.unshift({

                        userId: 10,

                        name: '新来的'

                    })

                }

            },

        })

    </script>

七、v-if与v-show区别

  1. 区别:
    1. v-if删除dom元素
    2. v-show设置display:none
  2. 应用场景:
    1. v-if只修改一次的时候可以使用v-if
    2. v-show频繁切换的时候可以使用v-show

<body>

    <div id="app">

        <button @click='change'>切换</button>

        <p v-if='flag'>{{ message }}</p>

        <div v-show='flag'>{{ message }}</div>

    </div>

    <script>

        var vm = new Vue({

            el: '#app',

            data: {

                message: 'Hello Vue!',

                flag: false

            },

            methods: {

                change() {

                    this.flag = !this.flag

                }

            },

        })

    </script>

</body>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值