vue 指令&自定义指令

指令

  • 完成一定功能的方式

{{example}} 插值表达式

<div id="app">
    {{msg}}
</div>

var vm = new Vue({
      el:"#app",
      data:{
            msg:"我是标题";
})

输出=> 我是标题


v-html 渲染文本内容(可识别标签)

<div id="app">
    <p v-html="msg"></p>
</div>

var vm = new Vue({
      el:"#app",
      data:{
            msg:"<h1>我是标题</h1>";
})

输出=> 我是标题


v-text渲染文本内容(不可识别标签)

<div id="app">
    <p v-text="msg"></p>
</div>

var vm = new Vue({
      el:"#app",
      data:{
            msg:"<h1>我是标题</h1>";
})

输出=> <h1>我是标题</h1>


v-bind:name 绑定属性,name表示属性名
简写:name

<a v-bind:href="url" :title="oti">...</a>
var vm = new Vue({
      el:"#app",
      data:{
            url:"https://www.baidu.com",
            oti:'我是title'
})


v-if 条件渲染,指令的表达式返回值为true是添加元素到文档中(注意:如元素需频繁控制添加删除,会影响性能,建议使用v-show)
同时配套还有v-else-ifv-if,跟原生的if..else意义相同

//模拟淘宝收货评价按钮
<div id="app">
    <button @click="confirmGoods" v-if="states==0">确认收货</button>
    <button @click="confirmGoods" v-else-if="states==1">点击评论</button>
    <button v-else="states==2">追加评论</button>
</div>

var appEl = document.getElementById('app');
var app = new Vue({
    el:`#app`,
    data:{
        states:0
    },
    methods:{
        confirmGoods(){
            this.states = ++this.states;
            console.log(this.states)
        }
    }
})


v-show 控制元素是否显示,方式为设置display属性的值

<div id="app">
    <button v-show="seen">确认收货</button>
</div>
var app = new Vue({
    el:`#app`,
    data:{
        seen:true
    }
})


v-on:name 绑定事件,name:表示事件类型
简写:@name

<div id="app">
        <button v-on:click="controlEl">点我</button>
        <p v-show="seen">lorel ipsum</p>
</div>
var app = new Vue({
    el:`#app`,
    data:{
        seen:true
    }
    methods:{
              controlEl(){
                    this.seen=!this.seen
              }
        }
})


v-for:"(val,index) in arr" 列表渲染,val表示数组arr的元素(也可以是对象Object),index表示数组arr里面的下标值

  • 使用v-for时建议添加key属性,给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,提高性能
<div id="app" key >
    <ul>
        <li v-for="(val,index) in arr" :key="val.id">{{val.val}} ------ {{index}}</li>
    </ul>
</div>

var app = new Vue({
    el:'#app',//vue作用的对象范围
      //为数组的每个元素创建id
    created(){
        var _id = 1;
        var newA = [];
        this.arr.forEach((val)=>{
            var obj = {
                val,
                id:_id
            }
            _id++;
            newA.push(obj);
        })
        this.arr = newA
    },
    data:{
        arr:['html','css','js','vue']
    }
})

输出:
html ------ 0
css ------ 1
js ------ 2
vue ------ 3

同时,v-for="(value, key, index) in Object"还可以通过Object进行迭代渲染列表
index代表下标,value代表值,key代表属性

<div id="app">
    <div v-for="(value, key, index) in object">
          {{ index }}. {{ key }}: {{ value }}
    </div>
</div>

new Vue({
  el: '#app',
  data: {
    object: {
      firstName: 'John',
      lastName: 'Doe',
      age: 30
    }
  }
})

输出
0:firstName:John
1:lastName:Doe
3:age:30


v-cloak 当数据未渲染的时候该指令生效,数据渲染之后则失效
主要作用是防止进入网页时,数据还没渲染出来,出现满屏的插值表达式{{}}

<style>
      [v-cloak]{
         display:none;
      }
</style>

<div id="app" v-cloak></div>


v-slot 插槽
组件模板中建立插槽,当需要插入内容时在HTML中编写需要插入的内容

  • 无名插槽:直接写需要插入的内容即可,内容将会插入到所有无名插槽中.
  • 具名插槽:使用的时候将需要的内容写在template标签中,并且通过v-slot:name(name表示插槽的名字)
<div id="app">
    <tab>
        <template v-slot:header>//插入到名为header的插槽里
            <div>我是插到header里面的元素</div>
        </template>
        <template v-slot:section>//插入到名为section的插槽里
            <div>我插入到了section元素里面</div>
        </template>
        <div>hello world</div>//插入到无名插槽中
        
    </tab>
</div>
//编写局部组件
var tab = {
    template:`
            <div>

                <header>
                    <input type="text" placeholder="新不了情" />
                
                    <slot name="header"></slot>//具名插槽
                </header>
                <section>
                    <slot name="section"></slot>//具名插槽
                </section>
                <footer>
                    <slot></slot> //无名插槽
                </footer>
            </div>
    `
}
//实例化Vue
var vm = new Vue({
    el:"#app",
    components:{
        tab//注册局部组件
    }
})

自定义指令

全局注册:
directive(name,callback(el,binding))
name:指令名称
callback(el,binding)回调函数,el渲染的元素,binding自定义属性

<div id="app">
      <p v-color="red">hello world</p>
</div>

Vue.directive('color',function(el,binding){
        //如果自定义指令内有指定参数就渲染里面的参数
    if(binding.value){
        el.style.backgroundColor=binding.value;
        //否则渲染固定的
    }else{
        el.style.backgroundColor='green';
    }
    console.log(binding)
})
//实例化red
var vm = new Vue({
    el:"#app",
    data:{
        red:"red"
    }
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343