首页 > 其他 > 详细

Vue 指令

时间:2021-03-17 14:50:22      阅读:15      评论:0      收藏:0      [点我收藏+]

v-if / v-else / v-else-if 条件判断

这里,`v-if` 指令将根据表达式 `seen` 的值的真假来插入/移除 `<p>` 元素。

<body>
    <div id="div" >
        <p v-if="seen">现在你看到我了</p>
    </div>
</body>
<script>
    var app = new Vue({
        el:#div,
        data:{
            seen:false
        }
    })
</script>

 

<body>
    <div id="app">
        <input type="text"  id="" v-model="type">
        <div v-if="type === ‘A‘">我是A</div>
        <div v-else-if="type === ‘B‘">我是B</div>
        <div v-else-if="type === ‘C‘">我是C</div>
        <div v-else-if="type === ‘D‘">我是D</div>
        <div v-else>我啥也不是</div>
    </div>
</body>
<script>
    var app = new Vue({
        el:#app,
        data:{
            type:‘‘
        }
    });

</script>

 

v-for 循环

<div id="app">
    <ul>
        <li v-for="(val,key) in arr">{{val}}---{{key}}</li>
    </ul>
    <ul>
        <li v-for="(val,key) in obj">{{val}}---{{key}}</li>
    </ul>
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {
            arr: [a, b, c],
            obj: { id: 1, name: 李四 }
        },
    })
</script>
<body>
    <div id="app">
        <!-- 数组 -->
        <ul>
            <li>{{arr[3]}}</li>
            <!-- v-for 循环的语法规则参考 js 的 for in 循环 -->
            <!-- 循环中可以得到值和下标 -->
            <!-- 值和下标完全当做data中的数据使用即可 -->
            <li v-for="(v,key) in arr" v-bind:id="v" v-if="key%2 !== 0">{{v}}---{{key}}</li>
        </ul>

        <!-- 对象 -->
        <ul>
            <li v-for="(v,k) in oop">{{v}}----{{k}}</li>
        </ul>

    </div>
</body>
<script>

    // for(cc in arr)
    var app = new Vue({
        el:#app,
        data:{
            arr:[ff,hh4,liuneng,伊丽莎白,yazhouwuwang],

            oop:{name:刘能,guinv:刘英,tubie:赵玉田}
        }
    });

</script>

 

v-show 显示隐藏

 根据表达式之真假值,切换元素的 `display` CSS 属性

案例:点击按钮切换隐藏显示

<div id="app">
    <input type="button" value="按钮" @click="isshow">
    <p v-show="is_show">Vue</p>
</div>
<script>
    var vm = new Vue({
        el:#app,
        data:{
            is_show:false
        },
        methods:{
            isshow:function(){
                this.is_show = !this.is_show;
            }
        },
    })
</script>

 

v-text 和 v-html

<body>
    <div id="app">
        <!-- v-html和v-text都是替换标签内容的 -->

        <!-- v-text 原样展示内容 -->
        <p v-text="s"></p>
        <!--  v-html 解析并展示内容 --> 
        <p v-html="n"></p>

        <!-- 插值表达式与v-text类似,都是原样展示内容 -->
        <p>{{k}}</p>

        <!-- 插值表达式与v-text的区别 -->
        <!-- v-text会替换标签内的全部内容 -->
        <p v-text="s">oooo</p>
        <!-- 插值表达式替换局部内容 -->
        <p >oooo{{k}}</p>
    </div>
</body>
<script>
    var app = new Vue({
        el:#app,
        data:{
            s:<s>123</s>,
            n:<s>345</s>,
            k:<s>567</s>
        }
    });

</script>

 

v-bind 属性绑定

可以绑定标签上的任何属性。

动态绑定图片的路径:

<img id=“app” v-bind:src="src" />
<script>
    var vm = new Vue({
        el: #app,
        data: {
            src: 1.jpg
        }
    });
</script>

绑定a标签上的id:

<a id="app" v-bind:href="‘del.php?id=‘ + id">删除</a>
<script>
    var vm = new Vue({
        el: #app,
        data: {
            id: 11
        }
    });
</script>

 

绑定class:

对象语法和数组语法

1. 对象语法

如果isActive为true,则返回的结果为

<div id="app" class="active"></div>
<div id="app" v-bind:class="{active: isActive}">
      hei
  </div>
  <script>
      var vm = new Vue({
          el: #app,
          data: {
              isActive: true
          }
      });
  </script>

 

2. 数组语法

渲染的结果

<div id="app" class="active text-danger"></div>
<div id="app" v-bind:class="[activeClass, dangerClass]">
      hei
  </div>
  <script>
      var vm = new Vue({
          el: #app,
          data: {
              activeClass: active,
              dangerClass: text-danger
          }
      });
  </script>

 

绑定style

对象语法和数组语法

1. 对象语法 - 渲染结果:

<div id="app" style="color: red; font-size: 40px;">hei</div>
<div id="app" v-bind:style="{color: redColor, fontSize: font + ‘px‘}">
      hei
  </div>
  <script>
      var vm = new Vue({
          el: #app,
          data: {
              redColor: red,
              font: 40
          }
      });
  </script>

 

2. 数组语法 - 渲染结果:

<div id="app" style="color: red; font-size: 18px;">abc</div>
<div id="app" v-bind:style="[color, fontSize]">abc</div>
  <script>
      var vm = new Vue({
          el: #app,
          data: {
              color: {
                  color: red
              },
              fontSize: {
                  font-size: 18px
              }
          }
      });
  </script>

 

v-bind 简化语法(: 代表v-bind)

<div id="app">
    <img v-bind:src="imageSrc">
    <!-- 缩写 --> 
    <img :src="imageSrc">
</div>

<script>
    var vm = new Vue({
        el: #app,
        data: {
            imageSrc: 1.jpg,
        }
    });
</script>

 

数据绑定 - 单向数据绑定

<div id="div">
    <input type="text" :value="input_val">
</div>

<script>
    var app = new Vue({
        el: #div,
        data: {
            input_val: hello world 
        }
    })
</script>

浏览器渲染结果:

<div id="div"><input type="text" value="hello world"></div>

通过浏览器 REPL 环境可以进行修改

app.input_val = ‘Vue‘

浏览器渲染结果:

<div id="div"><input type="text" value="Vue"></div>

 我们通过 vue 对象修改数据可以直接影响到 DOM 元素,但是,如果直接修改 DOM 元素,却不会影响到 vue 对象的数据;我们把这种现象称为 单向数据绑定

 

双向数据绑定 v-model

<div id="div">
    <input type="text" v-model="input_val" >
</div>

<script>
    var app = new Vue({
        el: #div,
        data: {
            input_val: hello world 
        }
    })
</script>

 通过 v-model 指令展示表单数据,此时就完成了 双向数据绑定

不管 DOM 元素还是 vue 对象,数据的改变都会影响到另一个

 注意:数据绑定是目前所有MVVM前端框架的核心特性;甚至可以说,没有数据绑定就不能算是框架;

 

双向数据绑定的应用范围

文本框 和 文本域

<div id="div">
    <textarea v-model="inp_val"></textarea>
    <div>{{ inp_val }}</div>
</div>

<script>
    var app = new Vue({
        el: #div,
        data: {
            inp_val: ‘‘
        }
    })
</script>

 

绑定复选框

<div id="div">
    吃饭:<input type="checkbox" value="eat" v-model="checklist"><br>
    睡觉:<input type="checkbox" value="sleep" v-model="checklist"><br>
    打豆豆:<input type="checkbox" value="ddd" v-model="checklist"><br>
    {{ checklist }}
</div>

<script>
    var vm = new Vue({
       el: #div,
        data: {
            checklist: ‘‘
            // checklist: []
        }
    });
</script>

 

绑定单选框

<div id="app"><input type="radio" name="sex" value="男" v-model="sex"><input type="radio" name="sex" value="女" v-model="sex"> 
    <br>
    {{sex}}
</div>

<script>
    var vm = new Vue({
        el: #app,
        data: {
            sex: ‘‘
        }
    });
</script>

 

修饰符

<div id="div">
    <input type="text" v-model.lazy="input_val">
    {{input_val}}
</div>

<script>
    var app = new Vue({
        el: #div,
        data: {
            input_val: hello world 
        }
    })
</script>

v-model.lazy  https://cn.vuejs.org/v2/guide/forms.html#lazy - 取代 `input` 监听 `change` 事件

v-model.number  https://cn.vuejs.org/v2/guide/forms.html#number - 输入字符串转为有效的数字

v-model.trim  https://cn.vuejs.org/v2/guide/forms.html#trim - 输入首尾空格过滤

 

v-on 绑定事件监听

https://cn.vuejs.org/v2/guide/events.html

 

1. 基本使用

<div id="app">
    <input type="button" value="按钮" v-on:click="cli">
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {
            cli:function(){
                alert(123);
            }
        }
    });
</script>

上面的代码运行是没有问题的,但是,我们不建议这样做,因为 data 是专门提供数据的对象,事件触发需要执行的是一段代码,需要的是一个方法 (事件处理程序) ;
修改代码如下:

<div id="app">
    <!-- 使用事件绑定的简写形式 -->
    <input type="button" value="按钮" @click="cli">
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {},
        // 将事件处理程序写入methods对象
        methods: {
            cli: function () {
                alert(123);
            }
        }
    });
</script>

向事件处理器中传参

<div id="app">
    <!-- 直接调用传参即可 -->
    <input type="button" value="按钮" @click="cli(1,3)">
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {},
        methods: {
            // 接受参数
            cli: function (a,b) {
                alert(a+b);
            }
        }
    });
</script>

 而此时,如果在处理器中需要使用事件对象,则无法获取,我们可以用特殊变量 `$event` 把它传入方法

<input type="button" value="按钮" @click="cli(1,3,$event)">
methods: {
    // 接受参数
    cli: function (a,b,ev) {
        alert(a+b);
        console.log(ev);
    }
}

2. 事件修饰符

 原生 JS 代码,想要阻止浏览器的默认行为(a标签跳转、submit提交),我们要使用事件对象的  `preventDefault()` 方法

<div id="app">
    <a href="http://www.qq.com" id="a">腾百万</a>
</div>
<script>
    document.getElementById(a).onclick = (ev)=>{
        // 组织浏览器的默认行为
        ev.preventDefault();
    }
</script>

使用修饰符 阻止浏览器的默认行为

<div id="app">
    <a href="http://www.qq.com" @click.prevent="cli">腾百万</a>
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {},
        // 将事件处理程序写入methods对象
        methods: {
            cli: function () {
                alert(123);
            }
        }
    });
</script>

使用修饰符绑定一次性事件

<div id="app">
    <a href="http://www.qq.com" @click.once="cli($event)">腾百万</a>
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {},
        // 将事件处理程序写入methods对象
        methods: {
            cli: function (ev) {
                ev.preventDefault();
                alert(123);
            }
        }
    });
</script>

按键修饰符

 绑定键盘抬起事件,但是只有`enter` 键能触发此事件

<div id="app">
    <input type="text"  @keyup.enter="keyup">
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {},
        methods: {
            keyup:()=>{
                console.log(111)
            }
        }
    });
</script>

系统修饰符

 按住 `shift` 后才能触发点击事件

<div id="app">
    <input type="button" value="按钮" @click.shift="cli">
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {},
        methods: {
            cli:()=>{
                console.log(111)
            }
        }
    });
</script>

鼠标修饰符

鼠标中键触发事件

<div id="app">
    <input type="button" value="按钮" @click.middle="cli">
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {},
        methods: {
            cli:()=>{
                console.log(111)
            }
        }
    });
</script>

 

v-cloak

当我们的网络很慢时,或者页面加载完毕而没有初始化得到 vue 实例时,页面中的 `{{}}` 则会展示出来,很不友好

为了防止这种现象,我们可以使用 CSS 配合 v-cloak 实现获取 VUE 实例前的隐藏(就是如果Vue没有加载进来则不显示Vue的代码)

<style>
    [v-cloak] {
        display: none;
    }
</style>
<div id="app">
    <p v-cloak>{{obj.id}}</p>
</div>
<script src="./vue.js"></script>
<script>
    setTimeout(() => {
        var vm = new Vue({
            el: #app,
            data: {
                obj: { id: 1, name: 李四 }
            },
        })
    }, 2000);
</script>
    <style>
        [v-cloak]{
            display: none
        }
    </style>
</head>
<body>
    <div id="app">
        <!-- 在vue加载之前隐藏插值表达式 -->
        <div v-cloak>
                {{obj.name}}
        </div>
        
    </div>
</body>
<script>
    var app = new Vue({
        el:#app,
        data:{
            obj:{name:lisi}
        }
    });

</script>

 

v-once

 只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过

<div id="app">
    <p v-once>{{msg}}</p>
</div>
<script>
    var vm = new Vue({
        el: #app,
        data: {
            msg:kkk
        },
    })
</script>

 

原样输出,不被编译
<body>
    
   <div id="app">
   
    <span v-pre>{{ 这条语句将不会被编译,原样输出 }}</span>

    <input type="text" name="" id="" v-model=‘msg‘><br>
    {{msg}}

   </div>


    <script>
        var app =  new Vue({
            el:#app,
            data:{
                msg:‘‘               
            }
        })

    </script>
</body>

 

Vue 指令

原文:https://www.cnblogs.com/dazahui/p/14537910.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!