韩国毛茸茸的丰满妇女

<strike id="j6ksu"></strike>
<th id="j6ksu"></th>
  1. <th id="j6ksu"></th>

    Vue系列入门教程(3)——常用指令

    Web前端 潘老师 7个月前 (09-02) 969 ℃ (0) 扫码查看

    在上一讲中,我们已经将Vue常用的指令列了出来,我们这边再说明一次:

    1.v-html:绑定元素的 innerHTML
    2.v-text:绑定元素的 innerText
    3. v-bind:属性名:绑定属性,可以简化为:属性名
    4. v-on:事件名: 绑定事件,可以简化为@事件名
    5.v-if: 判断元素是否需要渲染
    6.v-else-if: 与v-if合用
    7.v-else: 与v-if合用
    8. v-show: 判断元素是否应该显示
    9.v-for: 用于循环生成元素
    10. v-bind:key: 用于帮助在重新渲染时元素的比对,通常和v- for配合使用,以提高渲染效率,简写:key
    11.v-model: 语法糖,用于实现双向绑定,实际上,是自动绑定了value属性值,和注册了input事件

    下面我们通过一些案例来演示这些指令的使用方法:
    1、v-html

    <div id="app">
        <h1 v-html="title"></h1>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                title:"<span style='color:red'>商品管理</span>"
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令
    2、v-text

    <div id="app">
        <h1 v-text="title"></h1>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                title:"<span style='color:red'>商品管理</span>"
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令
    3、 v-model
    双向数据绑定的含义在于:相比较于单向数据绑定只能由数据决定页面的显示,而页面值修改不会影响原数据的值,而双向绑定的则是数据既可以决定页面显示的值,页面修改值也会同时修改对应的原数据。

    <div id="app">
        <input type="text" v-model="content">
        你输入的内容:<span>{{content}}</span>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                content:""
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令
    4、v-bind:属性名
    1)绑定普通属性

    <div id="app">
        <input type="text" v-bind:value="username"/>
        <!-- 简化写法 -->
        <input type="text" :value="age"/>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                username:"潘子夜",
                age:20
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令
    2)绑定class属性
    操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attribute,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 class style 时,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组

    No.1)对象语法:
    我们可以传给 v-bind:class 一个对象,以动态地切换 class:

    <div v-bind:class="{ active: isActive }"></div>
    

    上面的语法表示 active这个 class 存在与否将取决于数据 isActive 的 值是true还是false

    你可以在对象中传入更多字段来动态切换多个 class。此外,v-bind:class 指令也可以与普通的 class 属性共存:
    模板代码:

    <div class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }"></div>
    

    data代码:

    data: {
      isActive: true,
      hasError: false
    }
    

    渲染结果:

    <div class="static active"></div>
    

    isActive 或者 hasError 变化时,class 列表将相应地更新。例如,如果 hasError 的值为 true,class 列表将变为 "static active text-danger"
    绑定的数据对象不必内联定义在模板里:

    <div v-bind:class="classObject"></div>
    
    data: {
      classObject: {
        active: true,
        'text-danger': false
      }
    }
    

    渲染的结果和上面一样。我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式:

    <div v-bind:class="classObject"></div>
    
    data: {
      isActive: true,
      error: null
    },
    computed: {
      classObject: function () {
        return {
          active: this.isActive && !this.error,
          'text-danger': this.error && this.error.type === 'fatal'
        }
      }
    }
    

    No.2)数组语法:
    我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:

    <div v-bind:class="[activeClass, errorClass]"></div>
    
    data: {
      activeClass: 'active',
      errorClass: 'text-danger'
    }
    

    渲染为:

    <div class="active text-danger"></div>
    

    如果你也想根据条件切换列表中的 class,可以用三元表达式:

    <div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
    

    这样写将始终添加errorClass,但是只有在 isActivetrue 时才添加 activeClass

    不过,当有多个条件 class 时这样写有些繁琐。所以在数组语法中也可以使用对象语法:

    <div v-bind:class="[{ active: isActive }, errorClass]"></div>
    

    No.3)用在组件上:
    当在一个自定义组件上使用 class 属性时,这些 class 将被添加到该组件的根元素上面。这个元素上已经存在的 class 不会被覆盖。

    例如,如果你声明了这个组件:

    Vue.component('my-component', {
      template: '<p class="foo bar">Hi</p>'
    })
    

    然后在使用它的时候添加一些 class:

    <my-component class="baz boo"></my-component>
    

    HTML 将被渲染为:

    <p class="foo bar baz boo">Hi</p>
    

    对于带数据绑定 class 也同样适用:

    <my-component v-bind:class="{ active: isActive }"></my-component>
    

    当 isActive 为 true时,HTML 将被渲染成为:

    <p class="foo bar active">Hi</p>
    

    3)绑定style内联样式

    NO.1)对象语法
    v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS property 名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名:

    <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
    
    data: {
      activeColor: 'red',
      fontSize: 30
    }
    

    直接绑定到一个样式对象通常更好,这会让模板更清晰:

    <div v-bind:style="styleObject"></div>
    
    data: {
      styleObject: {
        color: 'red',
        fontSize: '13px'
      }
    }
    

    同样的,对象语法常常结合返回对象的计算属性使用。

    NO.2)数组语法
    v-bind:style 的数组语法可以将多个样式对象应用到同一个元素上:

    <div v-bind:style="[baseStyles, overridingStyles]"></div>
    

    NO.3)自动添加前缀
    v-bind:style 使用需要添加浏览器引擎前缀的 CSS property 时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

    NO.4)多重值
    从 2.3.0 起你可以为 style 绑定中的 property 提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:

    <div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>
    

    这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex

    5、v-on:事件名
    1)常规使用

    <div id="app">
        <button type="button" v-on:click="handleClick">点击</button>
        <!-- 简化方式 -->
        <button type="button" @click="handleClick2">点击2</button>
        <!-- 用于显示点击后的效果 -->
        <input type="text" :value="value1">
        <input type="text" :value="value2">
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                value1:"",
                value2:""
            },
            methods:{
                handleClick(){
                    this.value1="点击"
                },
                handleClick2(){
                    this.value2="点击2"
                }
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令
    2)vue-事件修饰符
    Vue.js 为 v-on 提供了事件修饰符:

    • .stop:等同于JavaScript中的event.stopPropagation(),防止事件冒泡
    • .prevent:等同于JavaScript中的event.preventDefault(),防止执行预设的行为(如果事件可取消,则取消该事件,而不停止事件的进一步传播)
    • .capture:与事件冒泡的方向相反,事件捕获由外到内
    • .self:只会触发自己范围内的事件,不包含子元素
    • .once:只会触发一次,还能被用到自定义的组件事件上
    • .passive:prevent 是拦截默认事件,而passive是不拦截默认事件,能够提升移动端的性能。

    冒泡事件:嵌套两三层父子关系,然后所有都有点击事件,点击子节点,就会触发从内至外,子节点->父节点的点击事件

    <!-- 阻止单击事件继续传播 -->
    <a v-on:click.stop="doThis"></a>
    
    <!-- 提交事件不再重载页面 -->
    <form v-on:submit.prevent="onSubmit"></form>
    
    <!-- 修饰符可以串联 -->
    <a v-on:click.stop.prevent="doThat"></a>
    
    <!-- 只有修饰符 -->
    <form v-on:submit.prevent></form>
    
    <!-- 添加事件监听器时使用事件捕获模式 -->
    <!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
    <div v-on:click.capture="doThis">...</div>
    
    <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
    <!-- 即事件不是从内部元素触发的 -->
    <div v-on:click.self="doThat">...</div>
    

    1、使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
    2、不要把 .passive .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。

    代码案例:
    No.1)不使用事件修饰符

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
            <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
            <style>
                div{
                    padding:10px;
                    color:white
                }
                .outer{
                    width:300px;
                    height:200px;
                    background-color: red;
                }
                .middle{
                    width:200px;
                    height:100px;
                    background-color: green;
                }
                .innner{
                    width:100px;
                    height:50px;
                    background-color: black;
                }
            </style>
        </head>
        <body>
            <div id="app">
                <div class="outer"@click="handleOuter">
                    最外层
                    <div class="middle" @click="handleMiddle">
                        中间层
                        <div class="innner" @click="handleInner">最里层</div>
                    </div>
                </div>
            </div>
            <script>
                var app = new Vue({
                    el:"#app",
                    data:{
                    },
                    methods:{
                        handleOuter(){
                            console.log("最外层点击事件触发了")
                        },
                        handleMiddle(){
                            console.log("中间层点击事件触发了")
                        },
                        handleInner(){
                            console.log("最里层点击事件触发了")
                        }
                    }
                });
            </script>
        </body>
    </html>
    

    点击最里层div区域,发现从里到外一次触发点击事件(即冒泡)
    Vue系列入门教程(3)——常用指令
    No.2).stop:将最里层div改为:

    <div class="innner" @click.stop="handleInner">最里层</div>
    

    点击最里层div区域,发现只有最里层触发,不会向上层冒泡:
    Vue系列入门教程(3)——常用指令
    No.3).prevent,在中间层新增:

    <a href="http://www.ieyego.com"  @click.prevent="handlerHerf">访问潘子夜博客</a>
    

    methods新增handlerHerf方法:

    handlerHerf(){
        console.log("访问潘子夜博客点击事件触发了")
    }
    

    点击请求发现页面并没有跳转到我的博客,但事件触发了:
    Vue系列入门教程(3)——常用指令
    No.4)其他的就不在此举列子了,可自行去尝试

    3)vue-按键修饰符
    在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:

    <!-- 只有在 `key` 是 `Enter` 时调用 `app.submit()` -->
    <input v-on:keyup.enter="submit">
    

    更多按键修饰符、按键码、系统修饰符等,具体的可以参考:https://cn.vuejs.org/v2/guide/events.html#%E6%8C%89%E9%94%AE%E4%BF%AE%E9%A5%B0%E7%AC%A6
    6、 v-if
    v-if后面跟的表达式如果为true,则会渲染,否则不会渲染

    <div id="app">
        <h1 v-if="flag">是否显示</h1>
        <button type="button" v-on:click="toggleClick">切换显示隐藏</button>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                flag:true
            },
            methods:{
                toggleClick(){//取反切换
                    this.flag=!this.flag
                }
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令
    7、v-show
    v-show后面跟的表达式无论为true还是false,都会渲染,不过为true则会显示,否则会有隐藏样式,这也是和v-if的区别。
    代码:

    <div id="app">
        <h1 v-show="flag">是否显示</h1>
        <button type="button" v-on:click="toggleClick">切换显示隐藏</button>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                flag:true
            },
            methods:{
                toggleClick(){//取反切换
                    this.flag=!this.flag
                }
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令
    8、v-else-ifv-else
    根据输入的分数显示对应的等级

    <div id="app">
        <h1 v-if="score<60">不及格</h1>
        <h1 v-else-if="score<70">及格</h1>
        <h1 v-else-if="score<80">中等</h1>
        <h1 v-else-if="score<90">良好</h1>
        <h1 v-else>优秀</h1>
        输入分数:<input type="number" v-model="score">
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                score:0
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令
    9、v-forv-bind:key

    说明:v-for="(item,i) in users" :key="i"item表示遍历的每一个元素,i表示遍历的索引,in换为of也可以,users表示被遍历的对象,:key每次遍历必须是不相同的值,提高渲染效率,这里我们目前先就取遍历的索引

    <div id="app">
        <ul>
            <li v-for="(item,i) in users" :key="i">遍历序号:{{i}},姓名:{{item.username}},年龄:{{item.age}}</li>
        </ul>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                users:[
                    {username:"小明",age:20},
                    {username:"小张",age:21},
                    {username:"小李",age:22}
                ]
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令

    需求:实现对多个商品信息的展示,点击添加按钮会新增一个商品信息,点击删除按钮删除对应的商品信息,并且显示总记录数,当总记录数为0时,显示没有商品。

    <div id="app">
        <h1>{{title}}</h1>
        名称:<input type="text" v-model="newProduct.name" />
        库存:<input type="number" v-model="newProduct.stock" />
        <button type="button" @click="handleAdd">添加</button>
        <ul>
            <li v-for="(item,i) in products" :key="i">商品名:{{item.name}},库存:{{item.stock}}   <button type="button" @click="handleDelete(i)">删除</button></li>
        </ul>
        <span>记录总数:{{products.length}}</span>
        <h2 v-if="products.length===0">没有商品</h2>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                title:"商品信息",
                newProduct:{
                    name:"",
                    stock:0
                },
                products:[
                    {name:"华为手机",stock:100},
                    {name:"小米手机",stock:80},
                    {name:"苹果手机",stock:50}
                ]
            },
            methods:{
                //添加
                handleAdd(){
                    this.products.push({name:this.newProduct.name,stock:this.newProduct.stock});
                    //添加完成后如果想对input框输入的内容情况,可在此直接将数据还原
                    //this.newProduct.name = '';
                    //this.newProduct.stock = 0;
                },
                //根据索引删除
                handleDelete(i){
                    this.products.splice(i,1);
                }
            }
        });
    </script>
    

    效果:
    Vue系列入门教程(3)——常用指令


    版权声明:本站所有文章,如无特殊说明,均为本站原创。全部下载资源版权归原作者所有。任何个人或组织,若未征得本站同意,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系潘老师进行处理。
    喜欢 (22)
    请潘老师喝杯Coffee吧!】
    分享 (0)

    您必须 微信登录 才能发表评论!

    韩国毛茸茸的丰满妇女