Vue的组件,过滤器,自定义指令以及v-if

v-if&v-show

 <div class="app">

v-show如果值为true 相应的节点就会显示,就算值是flase,在dom中依然存在,只是把display的值改成none 

        <h1 v-show="false">我爱你</h1>

v-if是直接将dom删除了,在dom文档中已经找不到对应的dom,变成了注释

        <h1 v-if="false">我爱你</h1>

如果频繁使用 就使用v-show 可以节约性能开销

如果短暂使用,例如页面一开始加载的时候进行判断显示 优先使用v-if

实际开发中,使用v-if比较多

 v-for比v-if优先级高,不推荐同时使用

解决v-if和v-for同时使用的方法是 使用computed计算属性来过滤,之后再渲染计算属性的数据

        <li v-for="(item,index) in arr">{{item}}</li>

    </div>

    <script src="./node_modules/vue/dist/vue.js"></script>

    <script>

        new Vue({

            el: '.app',

            data: {

                msg: 123,

                list: [1, 2, 3]

            },

            computed: {

                arr: function () {

                    return this.list.filter(r => r > 1)

                }

            },

            methods: {

            }

        })

    </script>

组件

<div class="app">

组件名是大写 在浏览器编译的时候会转成小写,导致找不到想应的组件,可以全变成小写,中间加-来解决

        <child1></child1>

所有的组件都需要使用一个div来包裹 

        <div><child-a/></div>

        <div><child-b/></div>

模板的第二种写法,使用template加id 

        <template id="childB">

            <div>

                <h1>我是程序员</h1>

                <h1>我是程序员</h1>

            </div>

        </template>

    </div>

    <script src="./node_modules/vue/dist/vue.min.js"></script>

    <script>

 全局组件 

模板的第一种写法

        Vue.component('child1',{

            template:`<h1>我是child1</h1>`

        })

        Vue.component('childA',{

            template:`<h1>我是childA</h1>`

        })

        Vue.component('childB',{

            template:'#childB'

        })

        new Vue({

            el:'.app'

        })

    </script>

过滤器

<div class="app" v-cloak>

       |过滤器的管道符 

        <h1>{{'我是李云龙:山本我日你先人'|fn('宝贝')|fn('sad')}}</h1>

        <h1>{{'我爱张sir'|str('金牌厨师')}}</h1>

        <h1>{{'hello'|he}}</h1>

    </div>

    <script src="./node_modules/vue/dist/vue.js"></script>

    <script>

        /* 全局过滤器 */

        Vue.filter('fn',function(v,s){

            /* v就是管道符左边的数据 */

            console.log(v);

            return v/* .substring(0,v.indexOf(':')) */+s

        })

        new Vue({

            el:'.app',

            /* 局部过滤器 */

            filters:{

                str(v,s){

                    return v+s

                },

                he(v){

                    return v.split('').reverse().join('')

                }

            }

        })

消除渲染时的过渡

当页面刷新的时候data中的数据还没有渲染出来,页面中就会显示原本写的插值语法,这时候就需要消除这个bug

在绑定的实例化对象的元素上上添加v-cloak 并在style样式中添加(只要前面加上v-都可以实现,随意命名,通常使用clock)

[v-cloak]{

            display: none;

        }

自定义指令

    <div class="app">

        <input type="text" v-bg>

        <input type="text" v-focus="{background:'yellow'}">

        <div style="width: 100px;height: 100px;" v-bg></div>

元素身上使用驼峰命名的属性,fontSize在元素身上会转化为fontsize导致两者的名字不一致,从而作用不生效 

        <p v-sty="{background:'pink',color:'yellow'}">我是程序员</p>

    </div>

    <script src="./node_modules/vue/dist/vue.js"></script>

    <script>

        /* 全局自定义指令 简写方式 不适用于DOM操作 */

        /* 定义指令要方法实例化Vue对象前面 */

        Vue.directive('bg', function (el) {

            /* 回调的第一个参数就是元素本身 */

            console.log(el);

            el.style.background = 'red'

        })

        /* 全局自定义指令 写全方式 */

        Vue.directive('focus', {

            /* 当绑定元素插入到DOM中 */

            inserted: function (el, bind) {

                el.focus();

                console.log(bind);

                el.style.background = bind.value.background

            }

        })

        new Vue({

            el: '.app',

            /* 局部的自定义指令 要加s */

            directives: {

                sty: {

                    inserted (el, bind) {

                        el.style.background = bind.value.background;

                        el.style.color = bind.value.color

                    }

                }

            }

        })

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容