欢迎光临散文网 会员登陆 & 注册

Vue01- 指令,过滤器,样式

2023-06-20 09:19 作者:废品批发  | 我要投稿

[题外话:ES6的新特性](https://www.jianshu.com/p/ac1787f6c50f)

MVVM模式


实例:  

项目的目录结构:  

项目的运行方式:  

数据代理

    let a={x:1,y:2};

    let b={z:1};

    Object.defineProperty(b,'x',{

        get(){

            return a.x;

        },

        set(value){

            a.x=value

        }

    })

通过修改b中的x属性就可以修改a中的x.


vue使用同样的原理: 当我们在vue实例中定义data时, data中的数据就会被以同样的方式被copy到vm(vue实例, 也是mvvm中的vm)上, 在vue实例的_data就是定义的data.


这解释了为什么vue中在data中设置了数据, 可以通过this.???调用, this指的就是vm, 即vue的实例, vm中被同步了data中的数据, 一旦发生修改data中的数据会被修改则是因为使用了数据代理.

指令

v-cloak

该指令其本质上是保持在元素上直到关联实例结束编译,保持期间运行指令定义的逻辑。

v-text

    <div v-html="msg">ddddd</div>

    <script>

        var vw=new Vue({

            data:{

                msg: '<h1>zzzzzz</h1>'

            }

        })

    </script>

v-html也会直接覆盖标签中的文本,但是它在解析时会将h1这样的元素当成html内容,不会原样解析,这是v-text或插值表达式不能做到的,这两者是直接解释。

v-bind

**注意:v-bind:可以被简写为 :,它会把后面的属性值中的内容理解为js处理,所以 :title=“mytitle+‘123’” 是可以被解释为mytitle变量值与123的字符串拼接。**

插值表达式通常用于指定标签内部的显示, v-bind用于标签属性的指定.

插值表达式中可以使用vue实例中的任何一个属性字段.

v-on

该指令用于绑定事件,**缩写为 @**。

    <input type="button" v-on:click="show">

    <script>

        var vm=new Vue({

            el: '..........',

            data:{

                ...........

            },

            methods:{

                show: function (){

                    alert("Hello!");

                }

            }

        })

    </script>

这里值得一提的另一件事:

    <input type="button" v-on:click="show(33333)">

    <script>

        var vm=new Vue({

            el: '..........',

            data:{

                ...........

            },

            methods:{

                show(value){

                    alert(value);

                }

            }

        })

    </script>

JS中的函数调用默认会传入一个event作为隐藏参数, 即

    <input type="button" v-on:click="show">

    <script>

        var vm=new Vue({

            el: '..........',

            data:{

                ...........

            },

            methods:{

                show(event){

                    alert(event.target); //这里的target就会显示上面那个button.

                }

            }

        })

    </script>

但一旦我们传入参数show(33333), 就会导致event这个隐藏参数失效.

所以:

    <input type="button" v-on:click="show(33333,$event)">

    <script>

        var vm=new Vue({

            el: '..........',

            data:{

                ...........

            },

            methods:{

                show(value,event){

                    alert(event.target); //这样就可以保留event这个参数, 该参数在很多需求的实现时会很有用, 可使用此方式保留.

                }

            }

        })

    </script>

 “跑马灯”功能:

在vue实例中访问自身的问题:  

课题代码:  

v-model

双向数据绑定指令。  

v-model用于收集表单元素的value值, v-model:value=???, 可以简写成v-model=???

v-for

循环普通数组  

循环对象数组  

循环对象的属性  

迭代数字  


注意:v-for在渲染时可能会有下列问题:

v-for练习

v-show和v-if

当v-if的值切换时,会不断的进行元素的创建和删除,而v-show是一定创建然后进行是否显示的切换,所以**v-if有较高的切换性能消耗,而v-show有较高的初始渲染消耗。**

自定义指令

自定义全局指令

指令设置函数的其他参数:  

    binding:一个对象,包含以下属性:

        name: 指令名,不包括 v-前缀

        value: 指令的绑定值,例如:v-my-directive=‘1+1’,value的值是2

        oldValue: 指令绑定的前一个值,只在update和componentUpdated中可用,无论值是否改变都可用。

        expression: 绑定值的字符串形式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"。

        arg: 传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"。

        modifiers: 一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。

    vnode:vue编译生成的虚拟节点

    oldVnode:上一个虚拟节点,仅在update和componentUpdated钩子中可用。

除了 el 之外,其他参数应该是只读的,尽量不要修改它们。如果需要在钩子函数之间共享参数,建议通过元素的dataset进行。  

自定义私有指令

使用directives属性进行相关设置:  

函数简写

此时函数中的内容将被认为同时写入update和bind中。  

事件修饰符

**.stop阻止冒泡:**  

**.prevent阻止默认行为:**  

只阻止元素默认的行为,对于点击事件等是不阻止的。  

**.capture添加事件侦听器时使用事件捕获模式:**  

添加该修饰,将导致从外向内触发函数, 即捕获阶段就启动函数, 而不加该修饰符默认使用冒泡模式, 在捕获阶段不会有动静。  

**.self只当事件在该元素本身(比如不是子元素)触发时触发回调:**    

**.once事件只触发一次:**    

.self和.stop的区别:  

按键修饰符

vue可以使用@keyup开启对于键盘按键抬起事件的监听,通过在后面添加修饰符可以控制响应特定的按键。

系统开放的按键修饰符:  

    .enter

    .tab (特殊, 配合keydown使用,不要keyup, tab键本身有切换焦点的功能)

    .delete

    .esc

    .space

    .up

    .down

    .left

    .right

对于没有的按键,方法一:@keyup.13 这里的13就是enter键的键码。  

其他键码: [JS keyCode键码](https://www.cnblogs.com/cnblogs-jcy/p/6409672.html)

也可以使用event.keyCode进行显示.

如果要键盘监听ctrl+y这样的多键连用, 则@keyup.ctrl.y="????"


自定义按键修饰符:  

计算属性

    computed:{

        newProperty:{  //newProperty就是你要新增的动态属性

            get(){

                return ???

            },

            set(value){


            }

        }

    }

简写, (简写时一定是明确要放弃使用set部分才行):

    computed:{

        newProperty(){  //newProperty就是你要新增的动态属性

            return ???

        }

    }

VUE中使用样式

class样式

[数组中的方法](https://blog.csdn.net/qq_42303885/article/details/85332359)  

使用v-bind绑定数组

<div :class="['red','thin']">  //其中red和thin都是定义好的class,注意数组内的引号不能省略!

v-bind与数组结合使用时,数组内可以使用三元表达式

    //当数组中的字符没有被引号修饰,将被解析为变量,flag将被解析为变量,使用三元表达式确定后面的class

    <div id='app' :class="['red','thin',flag?'active':'']">

    <script>

        var vm=new Vue({

            el:'#app',

            data:{

                flag:true

            }

        })

    </script>

v-bind与数组结合使用时,数组内可以使用对象

    //在对象中使用class作为key,用变量作为value,以决定class是否被应用

    <div id='app' :class="['red','thin',{'active':flag}]">

    <script>

        var vm=new Vue({

            el:'#app',

            data:{

                flag:true

            }

        })

    </script>

v-bind绑定的class中直接使用对象

 //这种情况下对象的属性可以省略引号,对象属性设置为class,对象值设置为true/false

 <div id='app' :class="{red:true,thin:true,active:true}">

也可以这样,将对象移动到data中再绑定

    <div id='app' :class="obj">

    <script>

        var vm=new Vue({

            el:'#app',

            data:{

                flag:true,

                obj:{red:true,thin:true,active:true}

            }

        })

    </script>

内联样式

v-bind绑定style,style内设置对象

 //对象本质上是无序的键值对,red带引号是为了不被当做变量处理,font-weight带引号是因为带`-`的属性, 引号不能省略。

    <div id='app' :style="{color:'red','font-weight':200}">

    <script>

        var vm=new Vue({

            el:'#app',

            data:{

                flag:true

            }

        })

    </script>

    //当然,我们也可以把对象抽取出来设置到data中

    <div id='app' :style="obj">

    <script>

        var vm=new Vue({

            el:'#app',

            data:{

                flag:true,

                obj:{color:'red','font-weight:200}

            }

        })

    </script>

v-bind绑定style,style内设置数组,数组中可以设置多个对象

    <div id='app' :style="[obj1,obj2]">

    <script>

        var vm=new Vue({

            el:'#app',

            data:{

                flag:true,

                obj1:{color:'red','font-weight':200}

                obj2:{'font-style':'italic'}

            }

        })

    </script>

过滤器

Vue允许自定义过滤器以进行常见文本的格式化。  

过滤器可以被应用于mustachc插值和v-bind表达式。  

过滤器需要被添加在JavaScript尾部,由管道符 `|` 指示。  

管道符前面的会作为第一个参数n, nameFilter2(2222)代码中传入的2222其实是作为函数中定义的arg.  

**注意:通过方式一定义的过滤器为全局过滤器,必须定义在vue实例之前!全局过滤器可以被多个vue实例使用,方法二的私有过滤器只能被当前实例使用。**  

当私有过滤器和全局过滤器重名时,调用时私有过滤器优先级更高,全局的将不会调用。  

Stylus语法

如果要使用stylus语法需要:  

[Stylus官网](http://stylus-lang.com/)    

vue需要安装相应的loader才能解析该语法.



Vue01- 指令,过滤器,样式的评论 (共 条)

分享到微博请遵守国家法律