vue.js 精学记录

v-bind:class使用的方式:

1.对象与法::class="{‘active‘:isActive}"

此时当isActive为true时,会拥有active

2.数组语法:需要应用多个class时,可以使用数组语法。

:class = " [activeCls,errorCls ] ",

var app = new Vue({
   el:"#app",
   data:{
        activeCls:‘active‘,
        errorCls:‘error‘
   }
})    

内置指令

v-cloak:

当网速较慢,vue.js还没加载完时,在页面上会显示{{message}}这样的字样,直到vue

创建实例,编译模板dom才会被替换,所以可能会闪动,只要加一句css就可以解决

[v-cloak] {
   display:none;
}

这个对于简单的项目很实用,在具有工程化的项目里,比如webpack和vue-router,项目html里只有一个空的div元素,其余全部由路由去挂载不同组件完成的,

所以不需要v-cloak.

v-once

定义它的元素之渲染一次,包括元素或组件的所有子节点,渲染后,不在随数据变化重新渲染。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="js/vue.min.js"></script>
    <title>Title</title>
</head>
<body>
    <div id="app">
        <template v-if="type===‘name‘">
            <label>用户名</label>
            <input placeholder="输入用户名" key="name-input">
        </template>
        <template v-else>
            <label>邮箱</label>
            <input placeholder="输入邮箱" key="mail-input">
        </template>

        <button @click="handleToggleClick">切换输入类型</button>
    </div>

    <script type="text/javascript">
        var app = new Vue({
            el:"#app",
            data:{
                type:‘name‘
            },
            methods:{
                handleToggleClick:function(){
                    this.type = this.type ===‘name‘ ? ‘mail‘ : ‘name‘;
                }
            }
        })
    </script>
</body>
</html>

vue 在渲染元素时,出于效率考虑,会尽可能的复用已有的元素而非重新渲染,比如上面的实例,如果不在input上面加上唯一的key,切换时input的内容时相同的,加上key之后为此切换都会重新渲染了。

v-for

v-for除了常用的功能外,还可以迭代整数。

<span v-for="n in 10">{{n}} </span>

输出 1 2 3 4 5 6 7 8 9 10

数组更新

当修改数组时,vue会检测到数据变化,所以用v-for渲染的视图也会立即更新。vue包含了一组观察数组变异的方法,使它们改变数组也会出发视图更新:

  • push()
  • pop()
  • shift()
  • unshift
  • splice()

   ? sort
     ? reverse()

需要注意的是,有些变动的数组中,vue是不能检测到的,也不会出发视图更新:

1.通过索引直接设置项,比如 app.books[3]={.....}

2.修改数组长度,比如 app.books.length=1

解决第一个问题有两种方法:

第一种是vue 内置的set方法:

Vue.set(app.books,3,{
   name:"揭秘",
   author:"zx"
})

如果是在webpack中使用组件化的方式,默认是没有导入Vue的,这时可以使用$set,如:

this.$set(app.books,3,{
  name:"揭秘",

  author:"zx"
})

另一种方法:

app.books.splice(3,1,{
  name:"揭秘",

  author:"zx"
})

解决第二个问题也可以用这样的方法:

app.books.splice(1);

修饰符

在@绑定的事件后面加小圆点".",再跟一个后缀来使用修饰符。Vue支持以下修饰符:

.stop

.prevent

.capture

.self

.once

具体用法有:

//阻止单击事件冒泡
<a @click.stop="handle"></a>

 //提交事件不再重载页面
<form @submit.prevent="handle”></form> 

//修饰符可以串联
<a @click.stop.prevent=”handle”></a>       

//只有修饰符
<form @submit . prevent></form>

//添加事件侦听器时使用事件捕获模式
<div @click.capture=”handle”>...</div>      

//只当事件在钙元素本身触发时书法回调
<div @click.self=”handle”>...</div>      

//只触发一次,组件同样适用
<div @click.once=”handle”>...</div>

在表单元素上监听事件时,还可以使用按键修饰符,比如按下具体某个键时才调用方法:

//只有在keyCode是13时调用vm.submit()

<input @keyup.13="submit" >

也可自己配置具体按键:

Vue.config.keyCode.f1=112;

//全局定义后就可以使用@keyuo.f1

除了具体的某个keyCode外,vue还提供了一些快捷名称,一下是别名:

  • .enter
  • .tab
  • .delete
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

这些按键修饰符可以组合使用,或者和鼠标一起配合使用:

  • .ctrl
  • .alt
  • .shift
  • .meta (Command,windows的窗口键)

 v-model

使用在input textarea等表单绑定时,改变表单的数值,会触发数据更新。

单选按钮:

在单独使用时,不需要v-model,只要v-bind绑定一个布尔类型的值就可以

<div id=”app”>
    <input type=”radio”:checked=”picked”>
    <label>单选按钮</label>
</div>

<script>
    var app = new Vue({
        el:"#app",
        data:{
            picked:true
        }
    })
</script>        

如果是组合使用来实现互斥选择的效果,需要v-model和value来配合。

<input type="radio" v-model="picked" value="html" id="html"><br/>
<input type="radio" v-model="picked" value="css" id="css"><br/>
<input type="radio" v-model="picked" value="js" id="js"><br/>
<p>选择的项目是:{{picked}}</p>
data:{
        picked:‘js‘
     }

这样的话,选择不同的radio,互斥并且会改变数据picked的值,从而引起视图的变化。

同理使用checkbox和radio基本上是一致的,单独使用用v-bind绑定一个boole类型的数值,

多个同时使用:

<input type="checkbox" v-model="picked" value="html" id="html"><br/>
<input type="checkbox" v-model="picked" value="css" id="css"><br/>
<input type="checkbox" v-model="picked" value="js" id="js"><br/>
<p>选择的项目是:{{picked}}</p>
data:{
        picked:[‘js‘,‘html‘]
     }

下拉框中使用:

<select v-model="selected">
    <option>html</option>
    <option>js</option>
    <option>css</option>
</select>
data:{
  selected:‘html‘
}

dangselect是多选的情况时,selected就是数组。

在实际适用业务中,有时需要绑定一个动态数据,这时可用v-bind实现:

<input type="radio" v-model="picked" :value="value">
<p>picked:{{picked}}</p>
<p>value:{{value}}</p>
data:{
         picked:false,
         value:"123"
     },

当选中的时候,picked的是会变成value的值‘123‘。

复选框:

<input type="checkbox" v-model="toggle" :true-value="value1" :false-value="value2">
<p>{{toggle}}</p>
<p>{{value1}}</p>
<p>{{value2}}</p>
data:{
        toggle:false,
        value1:‘a‘,
        value2:‘b‘
      },

勾选时,toggle的值时true-value即为a,不勾选时toggle的值为false-value,即为b。

下拉框:

<select v-model="selected">
    <option :value="{number: 123}">123</option>
</select>

<p>{{selected.number}}</p>

选择之后,selected变成对象,此时selected.number=123

v-model的修饰符

.lazy   v-model默认是在input事件同步输入框的数据,使用修饰符.lazy会转变为在change事件中同步,在失焦或者回车才触发

.number  可以将输入转换为Number类型。

.trim 自动过滤首尾空格

原文地址:https://www.cnblogs.com/liuzhixiang/p/8971638.html

时间: 2024-12-14 01:22:55

vue.js 精学记录的相关文章

vue.js精讲02

2017-09-17 笔记及源码地址 : https://github.com/wll8/vue_note vue 中的事件深入. 事件: @click/mouseover…事件简写: @ 如 @clkck属性简写: : 如 :src传入原生事件对象: $event 事件冒泡:原生 ev.cancelBubble=true;vue .stop; 默认事件:原生 ev.preventDefault();vue .prevent; 键盘事件:keydown 文字没出现keyup 文字出现键码 .13

vue.js精讲01

笔记及源码地址 : https://github.com/wll8/vue_note 01 2017-09-13 view一个 mvvm框架(库),和 ag 类似.比较小巧,容易上手. mvc: mvp mvvm mvx(mv*) vue 和 ag 的区别. 不用纠结什么好,项目适合什么就用什么. vue 简单 中文文档 指令: v-xxx 例子: html + json + vue实例 维护: 个人 适合: 移动 ag 上手难 英文文档 指令: ng-xxx 例子: 把所有属性和方法挂到 $s

Vue.js新手入门指南

最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在做自己的结业项目. 在做的过程中也对Vue.js的官方文档以及其各种特性有了许多认识.作为一个之前以PHP+模版引擎为主的开发,从一个从未接触过除HTML+CSS+JavaScript+JQuery以外的前端技术的人到现在可以独立使用Vue.js以及各种附属的UI库来开发项目,我总结了一些知识和经验

Vue.js 组件精讲

课程介绍:你会学到什么        了解 Vue.js 组件开发的精华        Vue.js 组件知识全覆盖        掌握多种 Vue.js 组件开发的模式        独立组件不依赖 Vuex 和 Bus 情况下,各种跨级通信手段(provide / inject.broadcast / dispatch.findComponents 系列)        7 个完整的 Vue.js 组件示例        如何做好一个开源项目        Vue.js 容易忽略的 API

MVVM大比拼之vue.js源码精析

VUE 源码分析 简介 Vue 是 MVVM 框架中的新贵,如果我没记错的话作者应该毕业不久,现在在google.vue 如作者自己所说,在api设计上受到了很多来自knockout.angularjs等大牌框架影响,但作者相信 vue 在性能.易用性方面是有优势.同时也自己做了和其它框架的性能对比,在这里.今天以版本 0.10.4 为准 入口 Vue 的入口也很直白: ? 1 var demo = new Vue({ el: '#demo', data: { message: 'Hello V

从零开始学 Web 之 Vue.js(四)Vue的Ajax请求和跨域

大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.Vue发送Aj

Vue.js中,如何自己维护路由跳转记录?

在Vue的项目中,如果我们想要做返回.回退操作时,一般会调用router.go(n)这个api,但是实际操作中,使用这个api有风险,就是会让用户跳出当前应用,因为它记录的是浏览器的访问记录,而不是你当前应用的访问记录,这是非常可怕的事情. 解决方案就是,我们自己来维护一份history跳转记录. 案例与使用场景 代码地址:https://github.com/dora-zc/mini-vue-mall 这是一个基于Vue.js的小型商城案例,应用场景: 自己实现一个Vue插件src/utils

vue.js 学习记录(二)

原文连接:http://www.cnblogs.com/keepfool/p/5625583.html 组件 #注册组件 Vue.component('my-component', { // 选项 }) 组件在注册之后,便可以在父实例的模块中以自定义元素 <my-component></my-component> 的形式使用.要确保在初始化根实例 之前 注册了组件: <!DOCTYPE html> <html> <body> <div id

vue.js 学习记录(一)

原文地址:http://www.cnblogs.com/rik28/p/6024425.html 1.这段代码在画面上输出"Hello World!". <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!--这是我们的View--> <