赞
踩
Vue 的官方文档中这样介绍它:
简单小巧的核心,渐进式技术栈,足以应付任何规模的应用。
简单小巧是指 Vue.js 压缩后大小仅有17KB。所谓的渐进式,就是你可以一步一步、有阶段性地来使用 Vue.js,不必一开始就使用所有的东西。
使用 Vue.js 可以让 Web 开发变得简单,同时也颠覆了传统前端开发模式,它提供了现代 Web 开发中常见的高级功能,比如:
vue中两个核心点
1. 响应的数据绑定
当数据发生改变 → 自动更新视图
利用Object.definedProperty的setter/getter代理数据,监控对数据的操作。
Object.definedProperty
只能兼容IE8以上的浏览器,vue也是如此!
2. 组合的视图组件
UI页面映射为组件树
划分组件可维护、可重用、可测试
MVVM模式
M:Model 数据模板
V:view 视图模板
vm:view-Model 视图模型
每一个应用都是通过 Vue 这个构造函数创建根实例(root instance)启动 new Vue(选项对象)
- var app = new Vue({
- // 选项
- })
变量 app 就代表了这个 Vue 实例,事实上,几乎所有的代码都是对象,写入 Vue 实例的选项内,对象包含挂载元素、数据、模板、方法等
vue代理data数据
每个 vue 实例都会代理其 data 对象里所有的属性,这些代理的属性是响应的;
注:新添加的属性不具备响应功能,改变后不会更新视图
vue实例自身的属性和方法
暴露自身的属性和方法,以 $ 开头 例如:$el $data…
vue生命周期
比较常用生命周期钩子有:
$el
还不可用。需要初始化处理一些数据时会比较有用。这些钩子与 el 和 data 类似,也是作为选项写入 Vue 实例内,并且钩子的 this 指向的是调用它的 Vue 实例:
- var app = new Vue({
- el: '#app',
- data: {
- name: 'adele'
- },
- created: function () {
- console.log(this.name); // adele
- },
- mounted: function () {
- console.log(this.$el); // <div id="app"></div>
- }
- })
插值与表达式
使用双大括号(Mustache语法)是最基本的文本插值方法,它会自动将我们双向绑定的数据实时显示出来。
如果有时候就是想输出HTML,而不是将数据解释后的纯文本,可以使用 v-html:
- <div id="app">
- <p v-html="link"></p>
- </div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- link: '<a href="#">这是一个链接</a>'
- }
- })
- </script>
在 {{}} 中除了简单的绑定属性值外,还可以使用JavaScript表达式进行简单的运算、三元运算等:
- <div id="app">
- {{ number / 10 }}
- {{ isOk ? '确定' : '取消' }}
- {{ text.split(',').reverse().join(',') }}
- </div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- number: 100,
- isOk: false,
- text: '123,456'
- }
- })
- </script>

显示结果依次为:10、取消、456,123
过滤器
Vue 只是在{{}}插值的尾部添加一个管道符“(|)”对数据进行过滤,经常用于格式化文本,比如字母全部大写等。过滤规则是自定义的,通过给 Vue 实例添加选项 filters 来设置。
- <div id="app">
- {{ date | formatDate }}
- </div>
-
- <script>
- var padDate = function (value) {
- return value < 10 ? '0' + value : value;
- };
- var app = new Vue({
- el: '#app',
- data: {
- date: new Date()
- },
- filters: {
- formatDate: function (value) {
- var date = new Date(value),
- year = date.getFullYear(),
- month = padDate(date.getMonth() + 1),
- day = padDate(date.getDate()),
- hours = padDate(date.getHours()),
- minutes = padDate(date.getMinutes()),
- seconds = padDate(date.getSeconds());
- return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
- }
- },
- mounted: function () {
- var _this = this;
- this.timer = setInterval(function () {
- _this.date = new Date();
- }, 1000);
- },
- beforeDestroy: function () {
- if(this.timer){
- clearInterval(this.timer);
- }
- }
- })
- </script>

过滤器也可以串联,而且可以接收参数,例如:
- <!-- 串联 -->
- {{ message | filterA | filterB }}
-
- <!-- 接收参数 -->
- {{ message | filterA('arg1', 'arg2') }}
这里的arg1和arg2将分别传给过滤器的第二个和第三个参数,以为第一个是数据本身。
过滤器应当用于处理简单的文本转换,如果要实现复杂的数据变换,应该使用计算属性。
计算数据
模板是为了描述视图的结构,模板中放入太多逻辑导致模板过重难以维护,所以遇到复杂的逻辑时应该使用计算属性。
- <div id="app">
- {{ reversedText }}
- </div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- text: '123,456'
- },
- computed: {
- reversedText: function () {
- return this.text.split(',').reverse().join(',');
- }
- }
- })
- </script>

所有的计算属性都以函数的形式写在 Vue 实例内的 computed 选项内,最终返回计算属性的结果。
每一个计算属性都包括 getter 和一个 setter。
- <div id="app">
- {{ fullName }}
- </div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- firstName: 'Jack',
- lastName: 'Green'
- },
- computed: {
- fullName: {
- // getter,用于读取
- get: function () {
- return this.firstName + ' ' + this.lastName;
- },
-
- // setter,写入时触发
- set: function (newValue) {
- var name = newValue.split('');
- this.firstName = name[0];
- this.lastName = name[name.length - 1];
- }
- }
- }
- })
- </script>

当执行 app.fullName = ‘John Doe’ 时,setter就会被调用,数据 firstName 和 lastName 都会相对更新,视图同样也会更新。
计算属性还经常用于动态地设置元素的样式名称 class 和内联样式 style,当使用组件时,计算属性也经常用来动态传递 props。
计算属性还有两个很实用的小技巧:一是计算属性可以依赖其他计算属性;二是计算属性不仅可以依赖当前 Vue 实例的数据,还可以依赖其他实例的数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。