Vue 常用指令、注册指令方法

本文详细介绍了Vue.js的基础知识,包括安装、项目目录结构解析以及常用指令的使用,如v-show、v-html、v-text、v-bind、v-on、v-model、v-for、v-if/v-else等。同时,通过实例展示了如何创建Vue项目、数据绑定、条件渲染、循环输出、事件处理和双向数据绑定。此外,还提到了v-once和v-pre指令的特殊用法,并讲解了自定义指令的注册方法。
摘要由CSDN通过智能技术生成

一、Vue简介

  • 一套构建用户界面的渐进式框架。
  • 只关注视图层, 采用自底向上增量开发的设计。
  • 目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
1.vue安装

两种方式:

  • 前端引入:下载vue.js文件,通过<script>标签引入到html文件中
  • 命令行安装
    $ cnpm install vue (cnpm:淘宝npm镜像)

vue-cli创建项目参考:vue-cli脚手架项目创建

2.vue项目目录结构解析

在这里插入图片描述

目录/文件说明
build项目构建(webpack)相关代码
config配置目录,包括端口号等。我们初学可以使用默认的。
node_modulesnpm 加载的项目依赖模块
src这里是我们要开发的目录,基本上要做的事情都在这个目录里。
里面包含了几个目录及文件:
assets: 放置一些图片,如logo等。
components: 目录里面放了一个组件文件,可以不用。
App.vue项目入口文件,我们也可以直接将组件写这里,而不使用 components 目录。
main.js项目的核心文件。
static静态资源目录,如图片、字体等。
test初始测试目录,可删除
.xxxx文件这些是一些配置文件,包括语法配置,git配置等。
index.html首页入口文件,你可以添加一些 meta 信息或统计代码啥的。
package.json项目配置文件。
README.md项目的说明文档,markdown 格式

二、常见指令

指令说明
v-show标签是否显示
v-html输出html代码
v-text输出文本
v-bind绑定属性
v-on绑定事件
v-model绑定变量
v-for循环
v-if v-else条件判断
v-pre跳过这个元素
v-once只执行一次
v-cloak解决初始化慢导致页面抖动
  1. 数据绑定 {{...}}
<!-- {{}} -->
 <div id="app">
     <p>{{message}}</p>        <!--   {{}} 数据渲染 -> 文本插值    -->
     <p>{{info}}</p>
 </div>
 <script>
     new Vue({
         el:'#app',    //将vue对象与选择器进行绑定
         data:{			//绑定的变量的值
             message:'第一个vue程序',
             info:'大家好'
         }
     })
 </script>
  1. 输出文本/html标签: v-text,v-html
<!-- v-text,v-html  -->
<div id="it">
    <div v-text='x'></div>
    <input type="checkbox" >a
    <input type="checkbox" >b
    <input type="checkbox" >c
    <input type="checkbox" @click='qita'>other
    <br><br>
    <div v-html='h' v-show='t'></div>
</div>

<script>
    let vt=new Vue({
        el:'#it',
        data:{
            t:false,
            h:'<textarea></textarea>',   //输出html代码,页面显示该标签
            x:'你好'
        },
        methods:{
            qita:function(){
                this.t=!this.t
            }
        }
    })
</script>
  1. 标签是否显示: v-show="false/true"
<!-- v-show -->
<div id="open">
    <p>你好</p>
    <p v-show='temp'>射雕</p>
    <p v-show='ok'>无效</p>
</div>

<script>
    let vm=new Vue({
        el:'#open',
        data:{
            temp:true,
            ok:false
        }
    })
    // 设置定时器
    window.setInterval(function(){
        vm.temp=!vm.temp
    },1000)

</script>

v-if,v-show的区别:

  • v-if底层待用appendchild实现,v-show通过样式的display控制是否显示
  • 加载性能: v-if>v-show
  • 切换开销:v-show>v-if
  • v-if是惰性的,真正的条件渲染,会确保在切换过程中条件块内的监听事件器和子组件适当地被销毁和重建
  • v-show也是惰性的,如果在初始渲染条件为假时,什么都不做,直到条件为真,才开始渲染
  1. 条件判断:v-if
<!-- v-if -->
    <div id="pan">
        <div v-if="role=='jock'">
            <h1>欢迎jock</h1>
        </div>
        <div v-else-if="role=='rose'">
            <h1>欢迎rose</h1>
        </div>
        <div v-else>
            <h1>~~</h1>
        </div>
    </div>
    <script>
        new Vue({
            el:'#pan',
            data:{
                role:'rose'
            }
        })
    </script>
  1. 循环输出:v-for
<!-- v-for -->
<div id="for">
    <ul>
        <li v-for='(item,index) in arr'>{{index}}:{{item}}</li>
    </ul>
    <ul>
        <li v-for='(item,key) in obj'>{{key}}:{{item}}</li>
    </ul>
    <table border='1'>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <tr v-for='item in objs'>
            <td>{{item.id}}</td>
            <td>{{item.name}}</td>
            <td>{{item.sex}}</td>
            <td>{{item.age}}</td>
        </tr>
    </table>
</div>
<script>
    new Vue({
        el:'#for',
        data:{
            arr:['jennie','rose','lisa','jisoo'],
            obj:{a:'jack',b:'lose',c:'join'},
            objs:[
                {
                    id:01,
                    name:'张三',
                    sex:'男',
                    age:12
                },
                {
                    id:02,
                    name:'李四',
                    sex:'男',
                    age:14
                },
                {
                    id:03,
                    name:'王五',
                    sex:'男',
                    age:13
                },
                {
                    id:04,
                    name:'赵六',
                    sex:'男',
                    age:11
                }
            ]
        }
    })
</script>
  1. 绑定属性/事件v-bind v-on
<!-- v-bind  v-on -->
 <style>
     .info{
         color:aquamarine
     }
 </style>
 <div id="bin">
     <a v-bind:href='link' v-bind:class='{info:flag}' v-on="{mouseenter:ok,mouseleave:no,click:myclick}">baidu</a>
     <!--简写: <a :href='link' :class='{info:flag}'>baidu</a> -->
 </div>
 <script>
     new Vue({
         el:'#bin',
         data:{
             link:'http://www.baidu.com',
             flag:true
         },
         methods:{
             ok:function(){
                 console.log('鼠标进入')
             },
             no:function(){
                 console.log('鼠标移出')
             },
             myclick:function(){
                 console.log('跳转百度链接')
             }
         }
     })
 </script>
  1. 双向交互获取值 v-model
<!-- v-model 双向交互,获取值-->
<div id="model">
    <input type="radio" v-model='gender' value=''><input type="radio" v-model='gender' value=''><br>
    性别:{{gender}}

    <br><br>

    <p>请选择:</p>
    <select v-model='girlfriends'>
        <option value="a">a</option>
        <option value="b">b</option>
        <option value="c">c</option>
        <option value="d">d</option>
    </select>
    <br>
    选择的是:{{girlfriends}}

    <br>
    <br>
    <textarea v-model='text'></textarea>
    <br>
    {{text}}
</div>

<script>
    new Vue({
        el:'#model',
        data:{
            gender:'',
            girlfriends:'',
            text:'红红火火恍恍惚惚'
        }
    })
</script>
  1. 只执行一次: v-once
<!-- v-once -->
<div id="once">
    <input type="text" v-model='opt'>
    <br>
    <p>{{opt}}</p>
    <p v-once>{{opt}}</p>
</div>
<script>
    new Vue({
        el:'#once',
        data:{
            opt:'grv'
        }
    })
</script>
  1. 跳过这个标签编译:v-pre
<!-- v-pre  跳过这个标签的编译-->
<div id="pre">
    <p v-pre>{{mes}}</p>
</div>
<script>
    new Vue({
        el:'#pre',
        data:{
            mes:'这个标签会被跳过编译,浏览器不会有它'
        }
    })
</script>

三、注册指令

1.注册全局指令:
<!-- Vue.directive({})    注册全局指令 -->
<div id="dir">
    <p>页面载入时,input标签自动获得焦点</p>
    <input type="text" v-focus>     <!-- v-focus是自己注册的指令 -->
</div>
<script>
    Vue.directive('focus',{
        inserted:function(el){        //inserted 表示当指定的元素插入到其父元素使执行这个函数
            el.focus()       //el 表示被绑定的对象,使被绑定的对象获得焦点
        }
    })
    new Vue({
        el:'#dir'
    })
</script>
2.注册局部指令
<!-- directives:{}  注册局部指令 -->
<div id="dirs">
    <input type="text" v-focu>
</div>

<script>
    new Vue({
        el:'#dirs',
        directives:{
            focu:{
                inserted:function(el){
                    el.focus()
                }
            }
        }
    })
</script>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值