好记性不如烂笔头

博客已迁移到CSDN《https://blog.csdn.net/qq_33375499

  最近公司新出一个框架,采用的是前后端分离的开发方式,后端用的是springboot+mybatis(还有额外的zk、缓存、日志等待),前端采用的是vue+es6,由于以前对vue只知其名,不知其意,今天主动去学习了一下vue的基本语法,在此做个记录,方便自己平时查阅及知识分享。如果大家想详细了解,请查阅 https://vuejs.bootcss.com/v2/guide/

  vue 的基本语法为:

<div id="app">
......
</div> Vue({
el:"#app" ,
.....
})

  其中,el中相关联的id为app的节点,我们称之为挂载点,而挂载点中的内容,称为模版(template)。

1 插值

  文本设值:使用文本来进行数据绑定最常见的就是使用Mustache语法(双大括号),也称之为插值表达式,如{{msg}}。该语法不能进行HTML内容的设值,所有的内容都会被编译成文本格式。v-text指令同样能够达到相同效果。

  HTML设值: 使用 v-html='msg'的方式,将内容输出为真正的HTML。如:

<span v-html="rawHtml"></span>

  内嵌表达式:在vue中,对于所有的数据绑定,都提供了JavaScript表达式支持,如:{{msg === 'yes'?'是':'否'}}、{{msg + ',你好!'}}、{{msg.split('').reverse().toString()}}

2 指令

  在vue中,指令(Directives)是带有 v- 前缀的特殊特性。指令的职责是,当表达式值改变时,将其产生的连带影响,响应式的作用域DOM。如: v-if='seen' (seen为true时执行)

  一些指令能够接收一个参数,在指令名称之后以冒号 表示,如:

// 绑定href属性
v-bind:href='https://www.cnblogs.com/www-123456/'
// 绑定click事件
v-on:click='click()'

  v-bind:常用于对元素属性的绑定添加。可以缩写为 :href='xxx'

  v-click:常用于对元素事件进行绑定添加。可以缩写为 @click='xxx'

3 计算属性

  模版内的表达式非常便利,但是放入太多,会使代码变得难以理解,并且不能重用(程序猿都是懒人)。所以,对于任何复杂逻辑,你都应该使用计算属性

  计算属性时基于它们的依赖进行缓存。只有相关依赖发生改变时,它们才会重新求值。这意味这只要值没有改变,多次访问同一个属性值,计算属性会立即返回之前的计算结果,而不必再次执行函数。

<div>
<p>{{msg}}</p>
<p>{{reversedMsg}}</p>
</div> var vm = new Vue({
el: '#app',
data: {
msg: 'Hello'
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// `this` 指向 vm 实例
return this.msg.split('').reverse().join('')
}
}
})

  vue 为计算属性提供了getter、setter。计算属性默认只有getter方法。

computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}

4 侦听器

  通过 vue 的 watch 选项,来相应数据的变化。当要在数据变化时执行异步式或开销较大的操作时,这个方式最有用。如:

<script>
var vm= new Vue({
el: '#app',
data: {
question: '',
answer: 'I cannot give you an answer until you ask a question!'
},
watch: {
// 如果 `question` 发生改变,这个函数就会运行
question: function (newQuestion, oldQuestion) {
this.answer = 'Waiting for you to stop typing...'
this.debouncedGetAnswer()
}
}
})
</script>

5 class与style绑定

  操作元素的class列表和内联样式是数据绑定的一个常见需求。因为他们都为属性。所有可以用 v-bind 来进行绑定: 只需要通过表达式计算出字符串结果即可。使用 v-bind 来对class 和 style 进行绑定是,除了字符串之外,还可以hi对象和数组。如:

v-bind:class="{active:isActive,'text-dange':hasError}"
// data为:data():{isActive:true,hasError:false}
// 结果为:class='active' v-bind:class="[activeClass, textClass]" v-bind:style="{color:activeColor,fontSize:fonsize}" v-bind:style="styleObj"
// data为:data():{styleObj:{color:'red',fontsize:'14px'}}

6 条件渲染

  v-if:当值为true时,该元素快渲染

  v-else-if:vue 2.1.0新增

  v-else

<div v-if="type==='A'">A</div>
<div v-else-if="type==='B'">B</div>
<div v-else>other</div>

  v-show:

<div v-show="yes">yes</div>

  v-if 是惰性的,只有当条件为true,才会开始渲染条件快。v-show在初始化就进行了渲染,只是切换元素效果进行宣示与隐藏。

7 列表渲染

  使用 v-for 指令遍历数组和对象,语法如下:

// items 为一个可遍历对象
v-for="item in items"
v-for="(item, index) in items"
v-for="item of items"
// object为 key/value 格式对象
v-for="value in object"
v-for='(key, value) in object'

8 事件处理 

v-on:click="count += 1"

v-on:click='click()'

var vm=new Vue({
el:"#app",
data:{count:1} ,
methods:{
click:function(){
this.count += 1;
}
}
})

  事件修饰符:.stop .prevent .capture .self .once .passive

<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a> <!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form> <!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a> <!-- 只有修饰符 -->
<form v-on:submit.prevent></form> <!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div> <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div> <!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a> <!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成 -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
不要把 .passive 和 .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你想阻止事件的默认行为。

  按键修饰符:.enter .tab .delete .esc .space .up .down .left .right

<!-- 只有在 `keyCode` 是 13 时调用 `vm.submit()` -->
<input v-on:keyup.13="submit"> <!-- 同上 -->
<input v-on:keyup.enter="submit"> <!-- 缩写语法 -->
<input @keyup.enter="submit"> // 可以通过全局 config.keyCodes 对象自定义按键修饰符别名,可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112

  鼠标按键修饰符:.left .right .middle

8 表单输入绑定

  基础语法:

  v-model="value1"     -> 双向绑定

  值绑定:

// 当选中是,vm.toggle == 'yes',当没有选中是 vm.toggle == 'no'
<input type="checkbox" v-model="toggle" true-value="yes" false-value="no" />

<input type="radio" id="one" value="One" v-model="picked"> <select v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>

  修饰符:

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" > <!--如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符-->
<input v-model.number="age" type="number"> <!--如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符-->
<input v-model.trim="msg">

9 组件基础

  每一个组件都是一个Vue实例。这句话非常重要。

  组件的注册方式分为两种,全局注册、局部注册。

  全局注册:注册之后可以用在任何新创建的Vue根实例(new Vue)的模版中。在所有子组件中也是如此。比如:

Vue.component('component-a', { /* ... */ })
Vue.component('component-b', { /* ... */ })
Vue.component('component-c', { /* ... */ }) new Vue({ el: '#app' })
<div id="app">
<component-a></component-a>
<component-b>
    <component-c></component-c>
 </component-b> 
</div>

  局部注册:通过一个普通的JavaScript对象来定义组件,然后在父组件中使用components 选项来定义你想要使用的组件。注意:局部注册的组件在其子组件中不可用。

var ComponentA = { /* ... */ }
var ComponentB = { /* ... */ }
var ComponentC = { /* ... */ } new Vue({
el: '#app',
components: {
'component-a': ComponentA,
'component-b': ComponentB
}
})

  9.1 传参

  父组件向子组件传值是通过属性的方法,即使用父组件的属性,在子组件中通过props来接受。

  子组件向父组件传递参数是通过发布订阅方式。子组件发布一个事件(this.$emit(event,arg))。父组件监听子组件方法的事件 @event。

  this.$emit(event,arg):绑定一个自定义事件event,当这个语句被执行时,会将参数arg 传递给父组件,父组件通过 @event 监听并接受该参数。

下面是我自己写的一个列子:

<!DOCTYPE html>
<html>
<head>
<title>vue学习</title>
<script type="text/javascript" src="./vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" name="text" v-model="inputData" />
<button @click="headearClick">提交</button>
<ul>
<li v-for="item in list" :title="item">{{item}}</li>
</ul>
<br />
<br />
要删除的值:<input type="number" v-model.number="number" />
<component-a :data="number" @delete="headearDelete"></component-a>
</div>
</body>
<script type="text/javascript">
Vue.component("component-a", {
props: ["data","index"],
template: '<button @click="click" title="删除无序列表中与输入框值相等">删除</button>',
methods: {
click: function() {
this.$emit("delete", this.data);
}
}
}) new Vue({
el: "#app",
data: {
inputData: "",
list: [],
number: ''
},
methods: {
headearClick() {
if(this.inputData != ""){
this.list.push(this.inputData);
this.inputData = "";
}
},
headearDelete(data) {
var arr = [];
for (var i = 0, len = this.list.length; i < len; i++) {
if(data != this.list[i]){
arr.push(this.list[i]);
}
}
this.list = arr;
this.number = '';
}
}
})
</script>
</html>

注意:我在该代码中引入了vue.js ,小伙伴们可以在 vue的教程https://cn.vuejs.org/v2/guide/installation.html 中查看下载,即 https://vuejs.org/js/vue.js

vue 简易学习的更多相关文章

  1. vue入门学习(基础篇)

    vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...

  2. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

  3. vue视频学习笔记01

    video 1 vue:读音: v-u-eview vue到底是什么?一个mvvm框架(库).和angular类似比较容易上手.小巧mvc:mvpmvvmmv*mvx官网:http://cn.vuej ...

  4. vue视频学习笔记

    video 7 vue问题: 论坛 http://bbs.zhinengshe.com------------------------------------------------UI组件 别人提供 ...

  5. TensorFlow简易学习[3]:实现神经网络

    TensorFlow本身是分布式机器学习框架,所以是基于深度学习的,前一篇TensorFlow简易学习[2]:实现线性回归对只一般算法的举例只是为说明TensorFlow的广泛性.本文将通过示例Ten ...

  6. vue.js 学习笔记3——TypeScript

    目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...

  7. vue.js学习资料

    vue.js学习VuejsAPI教程 https://vuejs.org.cn/guide/Vuejs自己的构建工具 http://www.jianshu.com/p/f8e21d87a572如何用v ...

  8. 在进行vue的学习,项目中需要引入bootstrap、jquery的步骤。

    在进行vue的学习,项目中需要引入bootstrap.jquery的步骤. 一.引入jQuery 在当前项目的目录下(就是package.json),运行命令 cnpm install jquery ...

  9. Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

    f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...

随机推荐

  1. Java 面试题 四

    1.序列化 File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ ...

  2. 【转载】BERT:用于语义理解的深度双向预训练转换器(Transformer)

    BERT:用于语义理解的深度双向预训练转换器(Transformer)   鉴于最近BERT在人工智能领域特别火,但相关中文资料却很少,因此将BERT论文理论部分(1-3节)翻译成中文以方便大家后续研 ...

  3. openstack导入镜像

    本文以制作CentOS7.2镜像为例,详细介绍手动制作OpenStack镜像详细步骤,解释每一步这么做的原因.镜像上传到OpenStack glance,支持以下几个功能: 支持密码注入功能(nova ...

  4. luogu4281

    P4281 [AHOI2008]紧急集合 / 聚会 题目描述 欢乐岛上有个非常好玩的游戏,叫做“紧急集合”.在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道 ...

  5. 网站快速收录/站点快速收录/seo快排技术/seo快速排名/泛域名快速收录/泛目录快速收录

    泛目录技术是目前最快速最有效的办法,增加站点的收录方面,这里推荐莲花泛目录 莲花泛目录,完善的技术支持,代码亲自编写,独立研发.业界领先. (这个是seo关键词,请无视,直接看下面的泛目程序介绍)网站 ...

  6. From 7.29 To 8.4

    From 7.29 To 8.4 大纲 英语按时背 做点思维题 可能还有时间学点东西, 这周我也不知道应该干什么 7.29 上午考试, 终于有一回不是自闭的考试了 题目比较简单, 就不说了 7.30 ...

  7. Docker小记

    1.Docker的安装 这里给一个比较通用的教程 Ubuntu 14.04 16.04 (使用apt-get进行安装) # step : 安装必要的一些系统工具 sudo apt-get update ...

  8. 【软件工程】Beta冲刺(4/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 新增数据分析展示等功能API 服务器后端部署,API接口的beta版实现 展示 ...

  9. curl_setopt(ch, option, value)函数上传文件

    bool curl_setopt ( resource $ch , int $option , mixed $value ) 为给定的cURL会话句柄设置一个选项 详细介绍请到:http://www. ...

  10. 黑马vue---17、vue中通过属性绑定绑定style行内样式

    黑马vue---17.vue中通过属性绑定绑定style行内样式 一.总结 一句话总结: 如果属性名中带有短线必须加引号,比如: h1StyleObj: { color: 'red', 'font-s ...