初识Vue.js
一 ,什么是Vue.js?
vue.js是一套构建用户界面的渐进式框架,它采用自底向上增量开发的设计。(自底向上设计方法是根据系统功能要求,从具体的器件、逻辑部件或者相似系统开始,凭借设计者熟练的技巧和丰富的经验,通过对其进行相互连接、修改和扩大,构成所要求的系统。)Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与单文件组件和Vue生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供驱动。
下面先简单了解Vue.js中的几个重要组成部分:声明式渲染,条件与循环,处理用户输入和组件。
二,声明式渲染。
Vue.js 的核心是一个允许采用简洁的模板语法来声明式的将数据渲染进 DOM,即使用双大括号声明包裹数据变量,实现声明式渲染。这里的声明主要有两大类,第一类,渲染元素内部的内容;第二类,渲染元素标签里的属性。下面是演示:
html代码:第一个div,message声明起到填充文本的作用;第二个div,通过v-bind实现对元素title的操纵。
<div id="smsxr">{{message}}</div>
<div id="bind-attr">
<span v-bind:title="message">鼠标悬浮查看加载事件。使用v_bind指令。指令一般加v_前缀,会在渲染的dom上应用特殊的响应行为,比如此处将title和message对应。</span>
</div>
JavaScript代码:先定义Vue对象,然后通过el,data等属性将对象与dom节点绑定,从而实现dom和对象中数据及方法等的对应。
//声明式渲染,调用时只要{{message}},即可使用message的值来填充dom元素的内容。
var smsxr=new Vue({
el:'#smsxr',
data:{
message:"声明式渲染,通过双大括号声明指明数据来源!"
}
})
//动态加载属性,通过动态化属性值变量来实现 v-bind:title="message".
var dtjzsx=new Vue({ el:"#bind-attr", data:{ message:"文字加载于"+new Date() } })
三,条件与循环。
在JavaScript中我们通常用if和for来实现条件和循环功能。Vue中我们使用类似的v-if和v-for来实现条件和循环。使用方式是在对应标签内部通过v-if=''和v-for=''这样的指令。引号内可以是变量也可以是简单的语句。下面分别来看条件和循环的实现:
通过v-if实现元素内容的显示和隐藏:
html代码:v-if="seen”,seen为true时元素显示,为false时元素隐藏,这样通过重置seen的值就可实现对元素可见状态的操纵。
<div id="kztj">
<p v-if="seen">现在你可以看到我,当seen为false时你将看不到我,Vue通过v_if来控制条件。此处演示也说明我们利用Vue可以将dom结构绑定到数据,即通过数据控制dom的显示结构。</p>
</div>
JavaScript代码:这里声明元素id为kztj的元素里面seen的取值。
//v-if控制条件,seen定义处。
var kztj=new Vue({
el:"#kztj",
data:{
seen:true
}
})
通过v-for实现元素的循环生成:
html代码:addListNew()是一个自定义函数,用于实现单击后添加新的子项。定义见本段末尾。
<div id="xh">
我是通过v-for循环生成的列表<button id="xh_btn" onclick="addListsNew()">单击我添加新项</button>
<ol>
<li v-for="todo in todos">
{{todo.text}}
</li>
</ol>
</div>
JavaScript代码:定义元素数据源。data本身是一个对象,它的子元素可以是对象或者特殊化的对象数组。调用时可通过v-for遍历。
//v-for控制循环
var xh=new Vue({
el:"#xh",
data:{
todos:[
{text:"声明式渲染。"},
{text:"动态加载属性。"},
{text:"v-if控制条件。"},
{text:"v-for控制循环。"}
]
}
})
function addListsNew(){
xh.todos.push({text:"xh.todos.push添加新项。O(∩_∩)O哈哈~"});
}
四,处理用户输入
这里的输入包括行为,操作,数据等等。例如单击,传入状态等。本例中选择的是用户的单击输入。
html代码:在标签内用v-on:click="函数名"声明click事件的响应函数。
<div id="clyhsr"><p>{{message}}</p>
<button v-on:click="reverseMessage">逆转消息</button>
</div>
JavaScript代码:通过Vue的methods属性,定义响应函数reverseMessage()。
//处理用户输入
var clyhsu=new Vue({
el:"#clyhsr",
data:{
message:"处理用户输入,这个输入泛指,包括输入的操作,状态等等,比如单击,某个动作"
},
methods:{
reverseMessage:function(){
this.message=this.message.split(',').reverse().join(',')
}
}
})
这是通过v-model双向绑定用户输入和应用状态:
html代码:v-model='message'将用户输入内容绑定到message变量上,需要时进行调用。
<div id="sxbd">
v-model使应用状态和用户输入之间的双向绑定变得容易。
<p>{{message}}</p>
<input v-model="message" />
</div>
JavaScript代码:初始化变量。
//用户输入和应用状态的双向绑定
var sxbd=new Vue({
el:"#sxbd",
data:{
message:"用户输入和应用状态的双向绑定。"
}
})
五,组件化应用的构建
组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、自包含和通常可复用的组件构建大型应用。也就是允许我们“工厂化”生产我们的应用吧。
html代码:组件调用时,在页面中添加组件标签名称,并为之添加上相应的指令。v-for遍历数据源,取得每一个元素放在item里面;v-bind:todo="item",将遍历获得的每个元素传给组件的todo属性,用于通过模板生成元素。两个指令结合,实现了组件的实例化。(可以理解为todo属性使得todo-item组件可以实现多态吧。)
<div id="component">
<ol>
<todo-item v-for="item in lists" v-bind:todo="item"></todo-item>
</ol>
</div>
JavaScript代码:注册组件,通过组件的props属性,实现数据的跨域传递(实例化)。如,todo对于不同的Vue对象代表不同的数据,相应的todo.text也就不同,最终生成的组件也就不一样.
//注册组件
Vue.component('todo-item',{
props:['todo'],
template:"<li>{{todo.text}}</li>"
})
//调用组件,每一个todo都是lists里的一个元素,v-for实现循环
var component=new Vue({
el:"#component",
data:{
lists:[
{text:"第一,注册组件。"},
{text:"第二,像使用原始标签一样,在页面中使用组件。"},
{text:"第三,通过定义原始数据,个性化调用组件。"},
{text:"组件可以有属性,用来将数据从父域传到子域,如本例中的prop"},
{text:"组件可以利用v-for,v-bind,实现循环和绑定事件监听。"}
]
}
})
组件和自定义元素的区别:
Vue 组件非常类似于自定义元素——它是 Web 组件规范的一部分,这是因为 Vue 的组件语法部分参考了该规范。例如 Vue 组件实现了 Slot API 与 is 特性。但是,还是有几个关键差别:
1,Web 组件规范仍然处于草案阶段,并且尚无浏览器原生实现。相比之下,Vue 组件不需要任何补丁,并且在所有支持的浏览器(IE9 及更高版本)之下表现一致。必要时,Vue 组件也可以包装于原生自定义元素之内。
2,Vue 组件提供了纯自定义元素所不具备的一些重要功能,最突出的是跨组件数据流,自定义事件通信以及构建工具集成。
做个小总结,就目前认知而言,我觉得,声明式渲染主要是数据相关,数据是一个应用的核心组成部分,是一个应用的灵魂,声明式渲染就是通过一个个声明来渲染应用的各个小框架,让应用有生命,例子中的声明只简单的发生在js脚本里,如果是复杂的应用则肯定少不了服务器语言,数据库,数据来源和数据结构也会相对复杂,但是最基本的东西万变不离其宗,所以一定要掌握声明式渲染的基本原理和实现;条件与循环,判断和遍历,可理解为对声明的数据进行分析必不可少的工具,当然,一般情况下循环对数据进行遍历的同时会进行相应的操作;处理用户输入,狭义的用户输入是单纯的文本输入,广义的输入可指代用户的任何输入,也就是用户对应用的任意操作,包括单击某个按钮,刷新页面等等,这里的输入即指广义的用户输入,处理的前提是辨识输入类型分类处理,比如通过v-on:click=‘’,来辨识单击操作并指定对应的处理函数。另一种处理输入的方式是使用v-model='',来记录用户输入,然后在需要的地方通过变量名调用;最后说说组件,Vue里的组件在理解上可以类比于html元素,但是,它又优于html元素,因为Vue组件能够实现很多复杂的功能,例如跨组件数据流,使得父子组件的解耦成为可能。
初识Vue.js的更多相关文章
- 第1章-初识Vue.js
一.初识Vue 1.1.本次我们学习的内容 常用指令:vue中最基础的内容 交互: 网络请求 组件: 是vue.js 这个框架 最核心,最精华的内容,因为vue呐,它在所有的框架中是把组件化做到了极致 ...
- 通过Laravel 初识Vue.js
最近也在学习laravel的框, 因为之前学过tp框架, 都说laravel是最优雅的框架,所以开学后忍不住去试试这个在国外已经火的不要不要的框架. 总的来说,对于学习完tp框架后,我觉得tp毕竟是中 ...
- vue.js随笔记---初识Vue.js
1.基础要求: 1.1 HTML CSS JAVASCRIPT 1.2 模块化基础 1.3 Es6初步了解 2.vue.js 轻量级的MVVM模式框架,他同时吸收了recat和angular的优点,他 ...
- Vue.js 学习笔记 第1章 初识Vue.js
本篇目录: 1.1 Vue.js 是什么 1.2 如何使用Vue.js 本章主要介绍与Vue.js有关的一些概念与技术,并帮助你了解它们背后相关的工作原理. 通过对本章的学习,即使从未接触过Vue.j ...
- Vue.js-----轻量高效的MVVM框架(一、初识Vue.js)
1.什么是Vue.js? 众所周知,最近几年前端发展非常的迅猛,除各种框架如:backbone.angular.reactjs外,还有模块化开发思想的实现库:sea.js .require.js .w ...
- Vue.js实战:初识Vue.js
一.Vue.js是什么 简单小巧的核心,渐进式技术栈,足以应付任何规模的应用. 简单小巧指的是Vue.js 压缩后大小仅有17KB 所谓渐进式(Progressive)就是你一步一步,有阶段性地来使用 ...
- Vue学习系列(一)——初识Vue.js核心
前言 vue.js是一套构建用户界面的渐进式框架,vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件. vue通过DOM事件操作和指令来进行视图层和模型层的相互通讯,会为每一 ...
- Vue.js高效前端开发 • 【初识Vue.js】
全部章节 >>>> 文章目录 一.Vue概述 1.Web前端框架介绍 2.MVC和MVVM 3.Vue介绍 4.安装Vue 二.Vue使用 1.第一个Vue应用 2.Vue的双 ...
- Vue.js——1.初识Vue
初识Vue.js 1. 什么是Vue.js Vue.js是前端主流框架之一,现在看招聘几乎都要求会vue 好像成了前端的代名词. Vue.js是构建界面 只关注视图层V,也就是页面的, 2. 为什么要 ...
随机推荐
- POST与GET
面试如果被问到这个问题,相信很多人都是会心一笑,答案随口而来: 1.GET在浏览器回退时是无害的,而POST会再次提交请求. 2.GET请求会被浏览器主动cache,而POST不会,除非手动设置. 3 ...
- java 基础知识五 数组
java 基础知识五 数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...
- 实现一个竖直的显示表头的表格(vue版本)
今天遇到一个问题,实现这样一个竖直的显示表头的表格,如下图.默认显示两列. vue实现代码如下: tableComponent.vue: <template> <table ...
- 20分钟快速了解Redis
Redis可以说是目前最火爆的NoSQL数据库! 过去几年,Memcached很盛行,现在有很多公司已将Memcached替换成了Redis.当然,很多人替换并不清楚为什么,只是感觉不想让主流抛弃,这 ...
- EXCEL数据导入数据库实例(NPOI)
Default.aspx 页面代码: 引用了: <script src="../../js/jquery.easyui.min.js" type="text/ ...
- Unity 动态加载 Prefab
Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBu ...
- ios系统判断某些适配 __IPHONE_OS_VERSION_MAX_ALLOWED
由于app的最新设计字体是ios9之后的平方字体,但app最低支持ios7,so...想在常量配置文件类里统一适配下字体,如下: //适配字体,ios9及以上系统使用新字体--平方字体 #if __I ...
- 计算机程序的思维逻辑 (82) - 理解ThreadLocal
本节,我们来探讨一个特殊的概念,线程本地变量,在Java中的实现是类ThreadLocal,它是什么?有什么用?实现原理是什么?让我们接下来逐步探讨. 基本概念和用法 线程本地变量是说,每个线程都有同 ...
- 一文读懂 HTTP/2 特性
HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议.由互联网工程任务组(IETF)的 Hypertext Transfer Protocol ...
- jquery easyui的datagrid在初始化的时候会请求两次URL?
我们项目前端用的是jquery easyui,刚开始使用datagrid加载列表初始化时总是请求两次URL,这让人非常不解,怎么总是请求两次呢?数据一多,加载速度明显变慢,通过查资料才知道原来是重复声 ...