常用js框架之vue.js(深入二:杂项)

    xiaoxiao2023-03-25  4

    妈蛋,写了一大半给弄没了,又重写。

    1.数据绑定语法。 前面用过{{}},可以替换文本,也可以替换属性值中的文本比如<input id = "{{id}}">

    {{{}}}三重花括号则可以替换html,有点6啊。

    也可以插入表达式{{a+1}}

    过滤器我们前面用过了{{value|filter1|filter2}},同时也可以带参数{{ message | filterA ‘arg1’ arg2 }}

    指令、参数、修饰符 <a v-bind:href.literal="/a/b/c"></a>。v-bind是指令表示执行什么操作,href是参数表明要操作的对象,literal是修饰符表名操作限制。

    指令也可以缩写 v-bind:href 可以写作:href v-on:click可以缩写成@click

    2.计算属性。 前面用过表达式{{a+1}},当我们的表达式没这么简单,比如计算一个位置在球面的坐标,一行代码搞不定,这时候就要用到计算属性。 两种方式: 一是使用vue基类的watch方法

    var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', lastName: 'Bar', fullName: 'Foo Bar' } }) vm.$watch('firstName', function (val) { this.fullName = val + ' ' + this.lastName })

    此时watch监听data属性中的firstname字段,当其有变化时自动执行后面的方法,val代表firstname当前值。

    二是使用vue基类的computed:{}属性

    var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', lastName: 'Bar' }, computed: { fullName: function () { return this.firstName + ' ' + this.lastName } } })

    3.Class 与 Style 绑定 vue模板也可以用作样式绑定。还记得外部样式class和内部样式style吗? 绑定class时使用 v-bind:class,分为对象绑定和数组绑定

    <div class="static" v-bind:class="{ 'class-a': isA, 'class-b': isB }"></div> data: { isA: true, isB: false } //渲染为: <div class="static class-a"></div> //当 isA 和 isB 变化时,class 列表将相应地更新。例如,如果 isB 变为 true,class 列表将变为 <div class="static class-a class-b"></div> //你也可以直接绑定数据里的一个对象: <div v-bind:class="classObject"></div> data: { classObject: { 'class-a': true, 'class-b': false } }

    此为对象绑定,是动态切换样式的好办法。数组样式v-bind:class=”[classObject1,classObject2]”很明显可以组合不同样式

    绑定style时使用 v-bind:style,也是分为对象绑定和数组绑定

    <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div> data: { activeColor: 'red', fontSize: 30 } //直接绑定到一个样式对象通常更好,让模板更清晰: <div v-bind:style="styleObject"></div> data: { styleObject: { color: 'red', fontSize: '13px' } }

    数组绑定类似class的用法

    4.条件渲染不说了 v-if v-else v-show前面都用过了

    5.列表渲染v-for也用过了,适用于单个li的模板,如果是多个li,就使用template v-for

    <ul> <template v-for="item in items"> <li>{{ item.msg }}</li> <li class="divider"></li> </template> </ul>

    列表模板经常要对其数据进行操作,考虑以下vue实例

    var vm = new Vue({ el: '#example-2', data: { parentMessage: 'Parent', items: [ { message: 'Foo' }, { message: 'Bar' } ] } })

    对数组items进行操作的方式很多,还记得原生js的数组操作吗?这里类似,不过有所区别。 vue提供了某些操作的变异方法,这些变异方法直接修改了原数组,让页面实时刷新。 push() pop() shift() unshift() splice() sort() reverse()

    也有非变异方法: 如 filter(), concat() 和 slice(),不会修改原始数组而是返回一个新数组。在使用非变异方法时,可以直接用新数组替换旧数组:

    example2.items = example2.items.filter(function (item) { return item.message.match(/Foo/) })

    可能你觉得这将导致 Vue.js 弃用已有 DOM 并重新渲染整个列表——幸运的是并非如此。 Vue.js 实现了一些启发算法,以最大化复用 DOM 元素,因而用另一个数组替换数组是一个非常高效的操作。

    还有track-by,注意刚才我们看到vue对列表渲染是有做优化的,尽可能的复用,track-by也是出于这个考虑的,意思是根据什么特征来进行复用。

    例如,假定数据为: { items: [ { _uid: '88f869d', ... }, { _uid: '7496c10', ... } ] } 然后可以这样给出提示: <div v-for="item in items" track-by="_uid"> <!-- content --> </div> 然后在替换数组 items 时,如果 Vue.js 遇到一个包含 _uid: '88f869d' 的新对象,它知道它可以复用这个已有对象的作用域与 DOM 元素。

    同时,还记得v-for里面可以使用$index吗?所以track-by="$index"也是可以的,简单地以对应索引的新值刷新。据说也有坑,暂时还没体验到。

    6.方法与事件处理器 方法处理器v-on:click=”say(‘hi’)” 前面用过了,不多说。 有时也需要在内联语句处理器中访问原生 DOM 事件。可以用特殊变量 $event 把它传入方法:

    <button v-on:click="say('hello!', $event)">Submit</button> // ... methods: { say: function (msg, event) { // 现在我们可以访问原生事件对象 event.preventDefault() } }

    虽然这样可以写dom事件,但是将dom事件跟业务逻辑混在一起是很蛋疼的,有没办法分开? 有,事件修饰符。Vue.js 为 v-on 提供两个 事件修饰符:.prevent 与 .stop 所以以上代码完全可以改写为:v-on:click.prevent=”say(‘hello!’)” event.preventDefault() 或 event.stopPropagation()可以分别用.prevent 与 .stop修饰符改写。

    1.0.16 添加了两个额外的修饰符:

    <!-- 添加事件侦听器时使用 capture 模式 --> <div v-on:click.capture="doThis">...</div> <!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 --> <div v-on:click.self="doThat">...</div>

    也有按键修饰符 记住所有的 keyCode 比较困难,Vue.js 为最常用的按键提供别名:

    <!-- 同上 --> <input v-on:keyup.enter="submit"> <!-- 缩写语法 --> <input @keyup.enter="submit"> 全部的按键别名:

    enter tab delete esc space up down left right

    使用 v-on 有几个好处:

    a.扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。 b.因为你无须在 JavaScript 里手动绑定事件,你的 ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦,更易于测试。 c.当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何自己清理它们。

    7.表单控件绑定vue,这里不多说,大概讲的是各种表单控件如何绑定vue,好处是表单控件的值被模板化后动态更新。

    转载请注明原文地址: https://ju.6miu.com/read-1204000.html
    最新回复(0)