任何编程语言在最初的时候都是没有框架的,后来随着在实际开发过程中不断总结『经验』
,积累『最佳实践』
,慢慢的人们发现很多『特定场景』
下的『特定问题』
总是可以『套用固定解决方案』
。
于是有人把成熟的『固定解决方案』
收集起来,整合在一起,就成了『框架』
。
在使用框架的过程中,我们往往只需要告诉框架『做什么(声明)』
,而不需要关心框架『怎么做(编程)』
。
对于Java程序来说,我们使用框架就是导入那些封装了『固定解决方案』
的jar包,然后通过『配置文件』
告诉框架做什么,就能够大大简化编码,提高开发效率。我们使用过的junit其实就是一款单元测试框架。
而对于JavaScript程序来说,我们使用框架就是导入那些封装了『固定解决方案』
的『js文件』
,然后在框架的基础上编码。
用洗衣服来类比框架:
典型应用场景:洗衣服
输入数据:衣服、洗衣液、水
不使用框架:手洗
使用框架:使用洗衣机,对人来说,只需要按键,具体操作是洗衣机完成的。人只是告诉洗衣机做什么,具体的操作是洗衣机完成的。
实际开发中使用框架时,我们也主要是告诉框架要做什么,具体操作是框架完成的。
在为AngularJS工作之后,Vue的作者尤雨溪
开发了Vue.js。他声称自己的思路是提取Angular中自己喜欢的部分,构建出一款相当轻量的框架。
Vue最早发布于2014年2月。作者在Hacker News、Echo JS与 Reddit的JavaScript版块发布了最早的版本。一天之内,Vue 就登上了这三个网站的首页。
Vue是Github上最受欢迎的开源项目之一。同时,在JavaScript框架/函数库中, Vue所获得的星标数已超过React,并高于Backbone.js、Angular 2、jQuery等项目。
Vue.js官网网址:https://cn.vuejs.org/
Vue (读音 /vjuː/,类似于view)
是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用
。Vue 的核心库只关注视图层
,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链
以及各种支持类库
结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
总结:
单方向
的把数据从模型中取出放到视图层展示只能实现展示而不是绑定
(之前使用js或jquery需要先获取Dom对象,在通过对象获取属性值来展示数据,一旦模型数据发生改变那么js代码也会发生变化。现在使用Vue可以实现绑定,将来模型数据发生变化视图中的数据也会跟着变化,不需要修改任何代码)对象(ViewModel)
将View(html元素)
和Model(数据)
实现双向绑定 『最佳实践』是实际开发中,针对特定问题提炼出来的最好的解决方案。把『最佳实践』抽取出来,封装到各自编程语言的程序包中,就是框架的基础。
对于Java程序来说,框架=jar包+配置文件。对于Vue来说,导入Vue的外部js文件就能够使用Vue框架了。
说明1:使用HBuilderX编写vue.js
第一步:在HBuilderX中创建工程
第二步:在工程目录下创建script目录用来存放vue.js文件
第三步:创建空vue.js文件
第四步:将官网提供的vue.js文件的内容复制粘贴到本地vue.js文件中
说明2:使用idea编写vue.js
Title
『声明式』
是相对于『编程式』
而言的。
上图含义解释:
说明:可以看到js有2种创建对象方式,写的是js代码不用引入vue.js文件,这是为了对比下面创建Vue对象的方式。
Title
HELLO
Title
{}}格式,指定要被渲染的数据 -->{{msg}}
说明:
el
属性指定选择器"#app"
,来绑定属性值id="app"
的div标签。data
设置属性message
和标签中的{{message}}
进行绑定。运行测试:
修改msg属性的值:
通过验证Vue对象的『响应式』
效果,我们看到Vue对象和页面上的HTML标签确实是始终保持着关联的关系,同时看到Vue在背后确实是做了大量的工作。
v-bind:HTML标签的原始属性名
Title
{}}格式,指定要被渲染的数据 -->{{msg}}{}}告诉Vue这里需要渲染在HTML标签的属性中,通过v-bind:属性名="表达式"的方式告诉Vue这里要渲染-->
本质上,v-bind:属性名="表达式"
和{{}}
它们都是用Vue对象来渲染页面。只不过:
而使用了双向绑定后,就可以实现:页面上数据被修改后,Vue对象中的数据属性也跟着被修改。
Title
{{msg}}
p标签内的数据能够和文本框中的数据实现同步修改:
实际开发中,要考虑到用户在输入数据时,有可能会包含前后空格。而这些前后的空格对我们程序运行来说都是干扰因素,要去掉。在v-model后面加上.trim
修饰符即可实现。
Vue会帮助我们在文本框失去焦点时自动去除前后空格。
没加之前:
加了之后:
根据Vue对象中,数据属性的值来判断是否对HTML页面内容进行渲染。
Title
说明:由于num同时绑定了input
标签的v-model="num"
属性和div标签的v-if="num%2==0"
属性,所以在文本框输入奇数、偶数
,显示效果也跟着变化。
Title
Title
Title
{引用数组元素的变量名}}渲染每一个数组元素 -->- {{fruit}}
Title
名称 单价 库存 备注 {{fruit.fname}} {{fruit.price}} {{fruit.fcount}} {{fruit.remark}}
Title
{{msg}}
Title
{{position}}
Title
+={{num3}}
编号 姓名 年龄 专业 {{employee.empId}} {{employee.empName}} {{employee.empAge}} {{employee.empSubject}}
var appTable = new Vue({"el": "#appTable","data": {"employeeList": [{"empId": 1,"empName": "tom","empAge": 11,"empSubject": "java"},{"empId": 2,"empName": "jerry","empAge": 22,"empSubject": "php"},{"empId": 3,"empName": "peter","empAge": 33,"empSubject": "python"}]}
});
编号:
姓名:
年龄:
专业:
var appDiv = new Vue({"el":"#appDiv","data":{// 初始值设置空字符串即可"empId":"","empName":"","empAge":"","empSubject":""}
});
测试是否正确的方式是:在控制台尝试修改Vue对象的数据属性值:
HTML标签:
编号:
姓名:
年龄:
专业:
{{empId}} {{empName}} {{empAge}} {{empSubject}}
[1]HTML标签
编号:
姓名:
年龄:
专业:
{{empId}} {{empName}} {{empAge}} {{empSubject}}
[2]Vue代码
var appDiv = new Vue({"el":"#appDiv","data":{// 初始值设置空字符串即可"empId":"","empName":"","empAge":"","empSubject":""},"methods":{"addRecord":function(){console.log("我点击了那个按钮……");}}
});
var appDiv = new Vue({"el":"#appDiv","data":{// 初始值设置空字符串即可"empId":"","empName":"","empAge":"","empSubject":""},"methods":{"addRecord":function(){console.log("我点击了那个按钮……");console.log(this.empId);console.log(this.empName);console.log(this.empAge);console.log(this.empSubject);}}
});
"addRecord":function(){// 确认单击事件是否绑定成功console.log("我点击了那个按钮……");// 确认是否能够正确收集到文本框数据console.log(this.empId);console.log(this.empName);console.log(this.empAge);console.log(this.empSubject);// 将收集到的文本框数据封装为一个对象var employee = {"empId":this.empId,"empName":this.empName,"empAge":this.empAge,"empSubject":this.empSubject};// 将上面的对象压入表格数据的employeeList数组appTable.employeeList.push(employee);
}
在我们各种语言的编程领域中,『生命周期』
都是一个非常常见的概念。一个对象从创建、初始化、工作再到释放、清理和销毁,会经历很多环节的演变。比如我们在JavaSE阶段学习过线程的生命周期,今天学习Vue对象的生命周期,将来还要学习Servlet、Filter等Web组件的生命周期。
Vue允许我们在特定的生命周期环节中通过钩子函数来加入我们的代码。
钩子函数:钩子函数是在一个事件触发的时候,在系统级捕获到了他,然后做一些操作。一段用以处理系统消息的程序。“钩子”就是在某个阶段给你一个做某些处理的机会。
特点:
Title
{{msg}}
访问测试: