美文网首页
vue系统指令

vue系统指令

作者: jarbir | 来源:发表于2019-05-31 15:37 被阅读0次

本文主要内容

  • 插值表达式
  • v-clock
  • v-text
  • v-html
  • v-bind
  • v-on
  • 跑马灯效果

vue初体验

新建空的html文件,插入vue.js文件

<!DOCTYPE html>
<html>
<head>
    <title>heiheihei</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        {{name}}
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el:'#app',
            data:{//module层
                name:'jarbir'
            }
        })
    </script>
</body>
</html>

显示样式:


微信图片_20190531103205.png

在console中输入app.$data.name ='kkk',页面将会自动的更新name的值,不需要去操作dom。

插值表达器{{}}

数据绑定最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值。例如:

<span>Message: {{ msg }}</span>

Mustache 标签将会被替代为对应数据对象上 msg 属性(msg定义在data对象中)的值。

无论何时,绑定的数据对象上 msg 属性发生了改变,插值处的内容都会自动更新。

{{}}对JavaScript 表达式支持,例如:

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ name == 'smyhvae' ? 'true' : 'false' }}

{{ message.split('').reverse().join('') }}

但是有个限制就是,每个绑定都只能包含单个表达式,如下表达式无效:

<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}

<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}

v-cloak

v-cloak:保持和元素实例的关联,直到结束编译后自动消失。

v-cloak指令和CSS 规则一起用的时候,能够解决差值表达式闪烁的问题(即:可以隐藏未编译的标签直到实例准备完毕)。

就拿上一段代码来举例,比如说,{{name}}这个内容,在网速很慢的情况下,一开始会直接显示{{name}}这个内容,等网络加载完成了,才会显示smyhvae。那这个闪烁的问题该怎么解决呢?

解决办法是:通过v-cloak隐藏{{name}}这个内容,当加载完毕后,再显示出来。

<!DOCTYPE html>
<html>
<head>
    <title>heiheihei</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style type="text/css">
        
    [v-cloak] {
      display: none;
    }
    </style>
</head>
<body>
    <div id="app">
        <span v-cloak>{{name}}</span>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el:'#app',
            data:{//module层
                name:'jarbir'
            }
        })
    </script>
</body>
</html>

v-text

v-text可以将一个变量的值渲染到指定的元素中。例如:

<!DOCTYPE html>
<html>
<head>
    <title>heiheihei</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style type="text/css">
        
    </style>
</head>
<body>
    <div id="app">
        <span v-text="name"></span>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el:'#app',
            data:{//module层
                name:'jarbir'
            }
        })
    </script>
</body>
</html>
image.png

差值表达式和 v-text 的区别

<!-- 差值表达式 -->
<span>content:{{name}}</span>

<!-- v-text -->
<span v-text="name">/span>

区别

  • v-text 没有闪烁的问题,因为它是放在属性里的。
  • 插值表达式只会替换自己的这个占位符,并不会把整个元素的内容清空。v-text 会覆盖元素中原本的内容。

v-html

v-text是纯文本,而v-html会被解析成html元素。

注意:使用v-html渲染数据可能会非常危险,因为它很容易导致 XSS(跨站脚本) 攻击,使用的时候请谨慎,能够使用{{}}或者v-text实现的不要使用v-html。

<!DOCTYPE html>
<html>
<head>
    <title>heiheihei</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style type="text/css">
        
    </style>
</head>
<body>
    <div id="app">
        <p>{{msg}}</p>
        <p v-text="msg"></p>
         <p v-html="msg"></p>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el:'#app',
            data:{//module层
                msg:'<h1>1234234324</h1>'
            }
        })
    </script>
</body>
</html>

运行结果:


image.png

v-bind:属性绑定机制

v-bind:用于绑定属性

<img v-bind:src="imgsrc">

<p v-bind:style="{fontSize:size+'px'}"></div>

具体例子:

<!DOCTYPE html>
<html>
<head>
    <title>heiheihei</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style type="text/css">
        
    </style>
</head>
<body>
    <div id="app">
        <!--就是value字符串 -->
        <input type="text" value="msg">
        <!--是vue中msg的值-->
        <input type="text" v-bind:value="msg">
        <!--path是vue中的值 -->
        <a v-bind="{href:'https://www.baidu.com/'+path}">链接</a>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el:'#app',
            data:{//module层
                msg:'value',
                path:'a.html'
            }
        })
    </script>
</body>
</html>

结果:


image.png

v-on:事件绑定机制

v-on:click:点击事件

<!DOCTYPE html>
<html>
<head>
    <title>heiheihei</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
        .activated {
            color: red;
        }
    </style>
</head>
<body>
    <div id="app">
        <div @click="handleDivClick"
            :class="[activated]"
        >
            Hello world
        </div>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el:'#app',
            data: {
                activated:""
            },
            methods: {
                //点击事件执行方法
                handleDivClick: function() {
                    this.activated = this.activated === "activated"?"":"activated"
                }
            }
        })
    </script>
</body>
</html>

结果:
点击文字之后变成红色


image.png

v-on的简写形式

例如:

  <button v-on:click="change">改变name的值</button>

可以简写成

  <button @click="change">改变name的值</button>

v-on的常用事件

v-on 提供了click 事件,也提供了一些其他的事件。
*v-on:click
*v-on:keydown
*v-on:keyup
*v-on:mousedown
*v-on:submit

实践案例(跑马灯效果)

文字滚动实现思路

  1. 每次拿到字符串,截取第一个字符,放到字符串的结尾,这样就实现滚动效果
  2. 实现文字的自动滚动效果,可以把步骤1放到定时器中,重复操作。
    代码示例:
<!DOCTYPE html>
<html>
<head>
    <title>heiheihei</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <p>{{msg}}</p>
        <input type="button" value="跑马灯走起" @click="startMarquee">
        <input type="button" value="跑马灯结束" @click="stopMarquee">
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el:'#app',
            data: {
                msg:'还要多久才能进入你的心',
                intervalId:null
            },
            methods: {
                startMarquee: function() {
                    //开启定时器之前先判断避开启多个定时器
                    if (this.intervalId != null) {return;}
                    //this指向问题
                    // var _this=this;
                    // this.intervalId = setInterval(function() {
                    //  var start = _this.msg.substring(0,1);
                    //  var end = _this.msg.substring(1);
                    //  _this.msg = end + start;
                    // },400);

                    //上面的代码中,我们发现,如果在定时器中直接使用this,这个this指向的是window。
                    //为了解决这个问题,我们是通过_this来解决了这个问题。
                    //另外,我们还可以利用箭头函数来解决this指向的问题,
                    //因为箭头函数总的this指向,会继承外层函数的this指向。

                    this.intervalId = setInterval(() => {
                    var start = this.msg.substring(0,1);
                    var end = this.msg.substring(1);
                    this.msg = end + start;
                    },400);
            
                },
                stopMarquee:function() {
                    clearInterval(this.intervalId)
                    this.intervalId = null;
                }
            }
        })
    </script>
</body>
</html>

结果示例:


image.png

具体示例总结:

  • 在vue的实力中,如果想要获取data中的属性,methods中的方法,都要通过this来进行访问。这里的this指的是Vue的实力对象。
    *vm实例中会监听自身data中所包含的数据,只要数据发生变化,就会自动刷新,减少dom的操作。

相关文章

  • vue系统指令

    本文主要内容 插值表达式 v-clock v-text v-html v-bind v-on 跑马灯效果 vue初...

  • Vue常用系统指令

    插值表达式 数据绑定最常见的形式,其中最常见的是使用插值表达式,写法是{{}} 中写表达式 标签将会被替代为对应数...

  • Vue-系统指令

    1. v-on v-on:click(@click) v-on:keydown(@keydown) v-on:ke...

  • vue入门6---vue基本指令、自定义指令、插件

    一、vue常用指令概览 二、vue自定义指令 注册全局指令Vue.directive('my-directive'...

  • vue学习回顾第一天

    为什么要学习vue 什么是mvvm vue常用系统指令 vue的使用 插值表达式 v-text v-html v-...

  • Vue指令钩子函数

    Vue指令上篇文章有讲过了,现在分析Vue指令钩子函数。 自定义指令 全局定义:Vue.directive( ' ...

  • 40.Vue自定义指令--局部

    Vue指令详解参考 当全局指令和局部指令同名时以局部指令为准 案例(局部指令聚焦输入框): index.vue

  • Vue div节点滚动事件-加载更多

    使用Vue.directive注册全局指令 绑定事件 对于Vue自定义指令不明白的同学请移步: Vue自定义指令 ...

  • vue 的指令系统

    解释:指令 (Directives) 是带有 v- 前缀的特殊属性作用:当表达式的值改变时,将其产生的连带影响,响...

  • Vue基础使用

    简介 创建vue实例模板语法计算属性指令事件处理器表单控件生命周期 Vue实例 Vue组件介绍 组件系统是将一个大...

网友评论

      本文标题:vue系统指令

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