前端攻坚战

简介: 前端攻坚战

三大新框架:Angular.js、React.js、Vue.js。今天我们来磕这个最常用,影响极广的框架:Vue.js。

Vue.js可以作为一个js库来使用,也可以用它全套的工具来构建系统界面,这些可以根据项目的需要灵活选择,所以说,Vue.js是一套构建用户界面的渐进式框架。

Vue的核心库只关注视图层,Vue的目标是通过尽可能简单的 API 实现响应的数据绑定,在这一点上Vue.js类似于后台的模板语言。

Vue也可以将界面拆分成一个个的组件,通过组件来构建界面,然后用自动化工具来生成单页面(SPA - single page application)系统。

1.快速上手

还是从最基本的使用开始回顾。

第一步,需要实例化一个 Vue 对象,像下面这样:

var vm = new Vue({
  el: '#app',
  data: {message:'hello world!'}
});

html 页面中 id 为 app 的标签就可以通过模版语法接收到此消息:

  1. <divid="app">
  2.  {{ message }}
  3. </div>

是不是很眼熟?没错,和我们 python 后端的模版语法一样,所以就不要抵触,开开心心使用吧。

当然,我们还可以在 Vue 实例化过程中定义方法,如下:

var vm = new Vue({
  el: '#app',
  data: {message: 'hello world!'},
  methods:{
    fnChangeMsg:function(){
      this.message = 'hello Vue.js!'
    }
  }
});

我们可以使用下面的页面感受它的 响应式

<div id="app">
  <p>
    {{ message }}
  </p>
  <button @click="fnChangeMsg">
    点击即可改变数据
  </button>
</div>

下面我们分析一下这个阶段发生了什么:

首先,当创建一个 Vue 实例时,它会把 data 对象中所有属性添加到 Vue 的响应式系统中。当这些属性的值发生变化,视图将会匹配到更新之后的值。上面的例子,通过一个方法,改变 data 对象中的属性,使视图中的值随之变化,演示了响应式。

2.模版语法

模版语法的作用就是获取数据,并在 HTML 页面中进行展示。

所有 Vue.js的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。

2.1 插入值

1.最最常见的一种是胡子语法,即双大括号,也就是上面示例中的样式。除了可以获取值,大括号中还支持写表达式:

{{ number + 1 }}
{{ ok ? 'YES' : 'No' }}
{{ message.split('').reverse().join('') }}

2.还有一种情况,标签的属性需要获取值,这时就不能再次使用胡子语法了,可以改写为 v-bind 指令:

  1. <av-bind:href="url"vbind:title="tip">小闫劝你多喝热水</a>

2.2 指令

Vue 中指令就是带有前缀 v- 前缀的特殊属性。

指令属性的值预期是单个JavaScript表达式,指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于DOM。

常见的指令有 v-bindv-ifv-onv-for。下面举两个例子进行演示即可:

<!-- 根据 ok 的布尔值来插入/移除 <p> 元素 -->
<p v-if="ok">
  是否显示这一段
</p>
<!-- 监听按钮的 click 事件来执行 fnChangeMsg 方法 -->
<button v-on:click="fnChangeMsg">
  按钮
</button>

2.3 缩写

v-bind 和 v-on 事件这两个指令因为经常的使用,所以提供了简写的方式:

<!-- 完整的语法形式 -->
<a v-bind:href="url">...</a>
<!-- 缩写 -->
<a :href="url">...</a>
<!-- 完整的语法形式 -->
<button v-on:click="fnChangeMsg">
  按钮
</button>
<button @click="fnChangeMsg">
  按钮
</button>

2.4 Class 属性设置

设置元素的 class 属性可以使用 v-bind 指令。因为它们的属性值可以是表达式,vue.js在这一块做了增强。表达式结果除了是字符串之外,还可以是对象或者数组。

2.4.1 对象的情况

<div class="static" v-bind:class="{active:isActive,'text-danger':hasError }"></div>

data 的属性值是:

data: {
  isActive: true,
  hasError: false
}

最终渲染的效果:

  1. <divclass="static active"></div>

也可以给 v-bind:class 传一个对象引用

  1. <divv-bind:class="classObject"></div>

data 属性值可以写成:

data: {
  classObject: {
    active: true,
    'text-danger': false
  }
}

2.4.2 数组的情况

<div v-bind:class="[activeClass, errorClass]"></div>
......
data: {
  activeClass: 'active',
  errorClass: 'text-danger'
  1. }

最终渲染为:

<div class="active text-danger"></div>

如果你也想根据条件切换列表中的 class,可以用三元表达式:

<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

即当 isActive 值为 ture 时,属性为 activeClass,否则属性值为 ''

Js 的三元表达式: 条件?为真时的结果:为假时的结果

2.5 条件

一般通过条件指令来控制元素是显示还是隐藏,是创建还是销毁。

虽然语法有些许陌生,但是永远逃不了 if 、else if 、else 这三个东西,所有语言都是如此。那么我们来分情况看一下这三种情况如何书写:

2.5.1 v-if

v-if 可以控制元素的创建或者销毁

  1. <h1v-if="ok">Yes</h1>

2.5.2 v-else

v-else 指令来表示 v-if 的 else,v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

<div v-if="Math.random() > 0.5">
  Now you see me
</div>
<div v-else>
  Now you don't
</div>

2.5.3 v-else-if

v-else-if,顾名思义,充当 v-if 的“else-if 块”,可以连续使用:

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

2.5.4 v-show

另一个用于根据条件展示元素的选项是 v-show 指令。用法和 v-if 大致一样,但是它不支持 v-else ,它和 v-if 的区别是,它制作元素样式的显示和隐藏,元素一直是存在的:

  1. <h1v-show="ok">Hello!</h1>

2.6 列表循环

数一数,常用的指令还有俩,那快解决吧。

一种常用的情况--列表渲染,即通过遍历数组或者对象,渲染到页面中。这时就需要用到一个指令 v-for。同样我们通过数组和对象两种情况进行演示:

遍历数组

<ul id="example-1">
  <li v-for="item in items">
    {{ item }}
  </li>
</ul>

vue对象创建如下:

var example1 = new Vue({
  el: '#example-1',
  data: {
    items: ['foo','bar']
  }
})

如果想加上索引值,可以加上第二个参数

<ul id="example-2">
  <li v-for="(item, index) in items">
    {{ index }} - {{ item.message }}
  </li>
</ul>

遍历对象

也可以用 v-for 通过一个对象的属性来迭代

<ul id="v-for-object">
  <li v-for="value in object">
    {{ value }}
  </li>
</ul>

如果想加上对象属性名,可以加上第二个参数

<ul id="v-for-object">
  <li v-for="(value,key) in object">
    {{ key }}-{{ value }}
  </li>
</ul>

2.7 事件相关

2.7.1 事件绑定方法

可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。

事件的处理,简单的逻辑可以写在指令中,复杂的就需要在 vue 对象的 methods 属性中指定处理函数。

<div id="example-1">
  <!-- 在指令中写处理逻辑 -->
  <button v-on:click="counter += 1">Add 1</button>
  <p>The button above has been clicked {{ counter }} times.</p>
</div>
......
var example1 = new Vue({
  el: '#example-1',
  data: {
    counter: 0
  }
})

methods 属性中指定处理函数:

<div id="example-2">
  <!-- greet 是在下面定义的方法名 -->
  <button v-on:click="greet">Greet</button>
</div>
......
var example2 = new Vue({
  el: '#example-2',
  data: {
    name: 'Vue.js'
  },
  // 在 `methods` 对象中定义方法
  methods: {
    greet: function () {
      // `this` 在方法里指向当前 Vue 实例
      alert('Hello ' + this.name + '!')
    }
  }
})

2.7.2 事件修饰符

实际开发中,事件绑定有时候牵涉到阻止事件冒泡以及阻止默认行为,在 vue.js 可以加上事件修饰符

<!-- 阻止单击事件继续传播 -->
<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>
相关文章
|
6月前
|
Web App开发 前端开发 JavaScript
前端的培训计划书
前端的培训计划书
48 1
|
10月前
|
存储 数据采集 数据可视化
低代码烂大街了?不,低代码已然普及! by 彭文华
低代码烂大街了?不,低代码已然普及! by 彭文华
|
数据挖掘 云计算 开发者
呼唤懂技术、有热情的你!阿里云开发者运营招聘火热进行中
阿里云智能集团2024届校园招聘,呼唤懂技术、有热情的你!阿里云开发者运营招聘火热进行中
1482 1
|
前端开发 JavaScript 算法
六年前端的年终总结
当然,也不仅仅是为了那个马克杯。总结的目的主要在于回顾自己的一年,借此弄明白我的下一年想如何过,有哪些想要完成的目标。之前自己也写过两篇年终总结,在2019及2021春节前,今年算是赶了个早。
|
移动开发 监控 前端开发
耕耘大前端技术七年,我的九点思考总结
58 大前端技术服务体系开发七年有余,目前已成为 58 前端的顶梁柱,那么这一顶梁柱是如何是搭建起来的?又将朝向哪个方向发展呢? 本期,我们采访了 58 集团前端技术部负责人李祎,他分享了 58 集团大前端技术服务体系的建设经验,以及他对未来大前端趋势的思考。本文为采访整理文,期待你有所收获~
462 0
耕耘大前端技术七年,我的九点思考总结
|
前端开发 JavaScript 物联网
玉伯:前端的现状之痛及未来趋势
在 GMTC 北京上,我听了蚂蚁金服玉伯老师的分享。玉伯 2008 年加入阿里,在这期间,他和团队一起折腾过 KISSY、SeaJS、Ant Design、AntV 等开源项目,现在我们都喜欢用的语雀也是他团队的产品。
424 0
玉伯:前端的现状之痛及未来趋势
【氚云】亲历数字化转型,校长分享实战经验
亲历数字化转型,校长分享实战经验
249 0
【氚云】亲历数字化转型,校长分享实战经验
|
人工智能 安全 数据可视化
案例酷 | 兴城人居:数字时代的智慧物业让生活更巴适
疫情期间,多地楼市迎来了一波小阳春,可还没等欢呼雀跃就戛然而止了。随着科技发展和城市年轻化,新兴购房人群,特别是人才安居工程的建设,需要更创新的居住方式,更安全、更舒适、更智能的租住体验,对互联网、智能化、社交等新要素的追求也更为强烈。
案例酷 | 兴城人居:数字时代的智慧物业让生活更巴适
|
新零售 人工智能 监控
兴城人居:数字时代的智慧物业应该长这样|案例酷
成都兴城人居地产投资集团股份有限公司是区域内实力强劲的地产开发企业。近几年,兴城人居持续构建智慧物业“一体化”模式,丰富“智慧社区”衍生产品,为业主提供生活综合服务,将云上的在线业务与线下服务密切结合,探索出了一条社区服务运营的数字化、智慧化路径。疫情持续,更凸显出兴城人居前期布局的价值。
兴城人居:数字时代的智慧物业应该长这样|案例酷
|
人工智能 小程序 Cloud Native
技术阻击疫情,开发者在行动
对抗这次的新冠肺炎,我们每个人都责无旁贷。唯有众志成城,才能合力战胜疫情。我们也梳理和汇总了一些能够帮助疫情治理和远程办公、学习的产品和工具,希望可以给予政府、企业、开发者、学生等群体一些帮助。面对疫情,我们始终在一起。今天,就给大家介绍一下我们提供的产品和工具具体有哪些。
技术阻击疫情,开发者在行动