vue的介绍-基本语法

目录

1.vue介绍

1.1 什么是vue

1.2 vue的优点

2. 库和框架的区别

2.1 库

2.2 框架

3. MVVM

4. 安装vue

5.开发示例

5.1 vue实例

5.2 绑定事件

5.3 Vue双向数据绑定

6. Vue生命周期钩子

6.1推荐一个浏览器监测vue插件 谷歌版 !

7. 模板语法

1.1 插值

1.1.1 文本

1.1.2 html

1.1.3 属性

1.1.4 表达式

1.2 指令

1.2.1 核心指令

1.2.1.1 v-if |v-else-if|v-else

1.2.1.4 v-on|v-model|v-for

2. 过滤器

2.1 局部过滤器

2.2 全局过滤器

3. 计算属性

4.监听属性


1.vue介绍

1.1 什么是vue

vue是一个构建用户界面UI的渐进式javascript框架,渐进式的框架是指可以一步一步的由浅入深的去使用这个框架,该框架可以逐步引入项目。作者:尤雨溪

vue官网 Vue.js - 渐进式 JavaScript 框架 | Vue.js

1.2 vue的优点

1.体积小 压缩后33k左右,体积小意味着下载速度很快。

2.更高的运行效率 基于虚拟dom,一种预先通过javascript进行各种计算,把最终的DOM操作计算出来并进行优化的技术。所谓虚拟dom指的是对真实dom的一种模拟。相对于直接操作真实dom,我们构建一棵虚拟的dom树,将各式数据和操作直接应用到这颗虚拟的dom树上,然后再虚拟的树修改应用到真实的dom树中,有助于减少dom的操作次数,带来性能上的提升,可以频繁的操作虚拟节点,然后一定时刻一次性的同步修改到真实dom节点

3.双向数据绑定 让开发者不用再去操作dom对象,把更多精力投入到业务逻辑上来

4.生态丰富,学习比较简单 市场上有很多稳定成熟的基于vue的ui框架可以拿来使用,实现快速开发。中国人开发的,中文资料丰富。

2. 库和框架的区别

2.1 库

本质上是一些函数的集合。每次调用函数,实现一个特定的功能,接着把控制权交给使用者,js中最典型的是jQuery,jquery本质上是封装dom操作,简化dom操作的工具库

2.2 框架

框架是一套完整的解决方案,使用框架是需要遵循框架的规则,将代码放入框架的合适位置,框架在合适的时候调用代码。代表Vue。一种框架会规定自己的编程方式,侵入性较高。

3. MVVM

MVVM,一种更好的UI模式解决方案,MVVM通过数据双向绑定让数据自动地双向同步

标题解释
MVVMM-V-VM
MModel数据模型,json格式的数据
Vview视图,JSP,HTML
VMViewModel视图模型,把Model和View关联起来的就是ViewModel,ViewModel负责把Model的数据同步到View显示出来, 还负责把View的修改同步回Model

虽然没有完全遵循MVVM模型,Vue的设计无疑受到了它的启发。另外一个js框架“knockout”完全遵循MVVM模型 学习Vue要转化思想:“不要在想着怎么操作DOM,而是想着如何操作数据!!!”

4. 安装vue

  1. cdn下载(需要网络) <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

  2. <!-- 生产环境版本,优化了尺寸和速度 --> <script src="https://cdn.jsdelivr.net/npm/vue"></script>

  3. 手动下载 <!-- 开发环境版本,包含了有帮助的命令行警告 -->

    <script src="dist/vue.js"></script>

    <!-- 生产环境版本,优化了尺寸和速度 -->

    <script src="dist/vue.min.js"></script>

CDN加速 CDN的全称是Content Delivery Network,即内容分发网络,CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。CDN加速主要是加速静态资源,如网站上面上传的图片、媒体,以及引入的一些Js、css等文件。CDN加速需要依靠各个网络节点,例如100台CDN服务器分布在全国范围,从上海访问,会从最近的节点返回资源,这是核心。CDN服务器通过缓存或者主动抓取主服务器的内容来实现资源储备。CDN基本原理:将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。 CDN部署在网络提供商的机房,是用户在请求网络服务的时候,可以从距离最近的网络提供商机房获取数据。 最大的优势就是可以让用户就近访问资源.

BootCDN BootCDN是Bootstrap中文网支持并维护的前端开源项目免费CDN服务,致力于为Bootstrap、jQuery、Angular、Vuejs一样优秀的前端开源项目提供稳定、快速的免费 CDN 加速服务

官网 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务

5.开发示例

vue有两种开发方式,一种是直接页面开发,一种是工程级开发,本示例使用的是直接页面开发方式。

5.1 vue实例

  1. 每个Vue应用都是通过用Vue构造器创建一个新的Vue实例开始的。

  2. 需要给vue指定一个内容管理区,通常我们也把它叫做边界,这意味着我们接下来的改动全部在指定的div内,div外部不受影响。

  3. 双花括号叫做插值

<div id="app">
    <h1>{{msg}}, {{ts}}</h1>
</div>

<script>
​
//创建vue实例
var vm = new Vue({
    //指定管理区域
    el: '#app',
    data: {
        msg: 'hello vue'
    }
});
    </script>

可以将div中的id属性改一个名称,查看一下信息是否还能正常输出,体会一下vue内容管理区的概念还特点。

data属性既可以是一个json对象也可以是一个函数,如:

var vm = new Vue({
    el: '#app',
    data: function(){
        return {
            msg: 'hello vue',
            ts: new Date().getTime()
        }
    }
});

注意:data在组件开发中的写法必须是函数。

5.2 绑定事件

  1. var vm = new Vue({
        el: '#app',
        
        data: function(){
            return {
                msg: 'hello vue',
                ts: new Date().getTime()
            }
        },

    vue指令:指的是是带有“v-”前缀的特殊属性

  2. vue实例的methods用来定义交互事件使用的函数,函数名不限制

示例:

   
    //定义交互事件
    methods: {
        clickme: function(){
            console.log('点到我了');
        }
    }
});
​
<div id="app">
    <h1>{{msg}}, {{ts}}</h1>
    <!-- v-on:  vue绑定事件的处理函数的方式 -->
    <button v-on:click="clickme()">点我试试</button>
</div>

打开开发者工具,点击按钮,在console中查看点击事件的效果。

5.3 Vue双向数据绑定

双向数据绑定,指的是数据的改变会引起dom的改变,dom的改变也是引起数据的改变。 示例:

<div id="app">
    <input type="text" v-model="msg"  @keyup="change()">
    <button  v-on:click="setVal">改变值</button>
</div>
var vm = new Vue({
    //指定vue实例的管理区域,也叫边界
    el: "#app",
            
    data: function() {
        return {
            msg: 'hello vue'
        }
    },
    
    methods: {
        change: function() {
            console.log(this.msg);
        },
        setVal: function() {
            this.msg = 'hello hello';
        }
    }
 });

打开开发者工具,在文本框中输出数据,观察console中的输出,可以看到数据双向绑定的效果。

注意点

  1. 只有当实例被创建时已经在data中存在的属性才是响应式的

  2. 用v-model指令在表单控件元素上创建双向数据绑定

  3. this在methods属性的方法里指向当前Vue实例,如果需要外部访问可以使用vm.name/vm.$data.name的方式

  4. 用v-once指令进行单向绑定,一般不用

  5. console对象可以使用printf风格的占位符。只支持字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)四种

  6. Vue实例还暴露了一些有用的实例属性与方法。它们都有前缀$,以便与用户定义的属性区分开来

6. Vue生命周期钩子

生命周期钩子示例已经在资料中提供,将demo4.html拷入项目即可。通过该示例了解vue常用的生命周期钩子,及其作用。 每个Vue实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新DOM等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

生命周期函数:

名称作用
beforeCreate第一个生命周期函数,表示实例完全被创建出来之前,会执行它。 注意: 在 beforeCreate 生命周期函数执行的时候,data 和 methods 中的 属性与方法定义都还没有没初始化
created第二个生命周期函数,在 created 中,data 和 methods 都已经被初始化好了! 如果要调用 methods 中的方法,或者操作 data 中的数据,最早,只能在 created 中操作
beforeMount第三个生命周期函数,表示 模板已经在内存中编辑完成了,但是尚未把模板渲染到页面中。在 beforeMount 执行的时候,页面中的元素,还没有被真正替换过来,只是之前写的一些模板字符串
mounted第四个生命周期函数,表示,内存中的模板,已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了,注意: mounted 是 实例创建期间的最后一个生命周期函数,当执行完 ##mounted 就表示,实例已经被完全创建好了,此时,如果没有其它操作的话,这个实例,就静静的 躺在我们的内存中,一动不动。此时,表示vue实例已经初始化完毕了,组建已脱离创建阶段,进入运行阶段了。接下来的是运行中的两个事件
beforeUpdate这时候,表示 我们的界面还没有被更新
updatedupdated 事件执行的时候,页面和 data 数据已经保持同步了,都是最新的
beforeDestroy销毁之前执行,当beforeDestroy函数执行时,表示vue实例已从运行阶段进入销毁阶段,vue实例身上所有的方法与数据都处于可用状态
destroyed当destroy函数执行时,组件中所有的方法与数据已经被完全销毁,不可用
activated页面出现的时候执行 activated生命周期函数,跟 监听 watch 有类似的作用
deactivated页面消失的时候执行

实例演示:

<!DOCTYPE html>
<html>
<head>
    <title>钩子函数</title>
    <meta charset="utf-8">
    <script src="js/v2.6.10/vue.js"></script>
<body>
​
<div id="app">
    <p>{{ message }}</p>
    <input type="button" @click="change" value="更新数据" />
    <input type="button" @click="destroy" value="销毁" />
</div>
​
<script type="text/javascript">
    var vm = new Vue({
        el: '#app',
        data: {
            message : "Welcome Vue"
        },
        methods:{
            change() {
                this.message = 'Datura is me';
            },
            destroy() {
                
                vm.$destroy();
            }
        },
        beforeCreate: function () {
            console.group('beforeCreate 创建前状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el); //undefined
            console.log("%c%s", "color:red","data   : " + this.$data); //undefined
            console.log("%c%s", "color:red","message: " + this.message);//undefined
        },
        created: function () {
            console.group('created 创建完毕状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el); //undefined
            console.log("%c%s", "color:green","data   : " + this.$data); //[object Object]  =>  已被初始化
            console.log("%c%s", "color:green","message: " + this.message); //Welcome Vue  =>  已被初始化
        },
        beforeMount: function () {
            console.group('beforeMount 挂载前状态===============》');
            console.log("%c%s", "color:green","el     : " + (this.$el)); //已被初始化
            console.log(this.$el); // 当前挂在的元素
            console.log("%c%s", "color:green","data   : " + this.$data); //已被初始化
            console.log("%c%s", "color:green","message: " + this.message); //已被初始化
        },
        mounted: function () {
            console.group('mounted 挂载结束状态===============》');
            console.log("%c%s", "color:green","el     : " + this.$el); //已被初始化
            console.log(this.$el);
            console.log("%c%s", "color:green","data   : " + this.$data); //已被初始化
            console.log("%c%s", "color:green","message: " + this.message); //已被初始化
        },
        beforeUpdate: function () {
            alert("更新前状态");
            console.group('beforeUpdate 更新前状态===============》'); //这里指的是页面渲染新数据之前
            console.log("%c%s", "color:green","el     : " + this.$el);
            console.log(this.$el);
            console.log("%c%s", "color:green","data   : " + this.$data);
            console.log("%c%s", "color:green","message: " + this.message);
            alert("更新前状态2");
        },
        updated: function () {
            console.group('updated 更新完成状态===============》');
            console.log("%c%s", "color:green","el     : " + this.$el);
            console.log(this.$el);
            console.log("%c%s", "color:green","data   : " + this.$data);
            console.log("%c%s", "color:green","message: " + this.message);
        },
        beforeDestroy: function () {
            console.group('beforeDestroy 销毁前状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el);
            console.log(this.$el);
            console.log("%c%s", "color:red","data   : " + this.$data);
            console.log("%c%s", "color:red","message: " + this.message);
        },
        destroyed: function () {
            console.group('destroyed 销毁完成状态===============》');
            console.log("%c%s", "color:red","el     : " + this.$el);
            console.log(this.$el);
            console.log("%c%s", "color:red","data   : " + this.$data);
            console.log("%c%s", "color:red","message: " + this.message)
        }
    })
</script>
</body>
</html>

6.1推荐一个浏览器监测vue插件 谷歌版 !

安装步骤

1.准备好插件 下载

文件 密码:3knf

2.下载好后我们打开谷歌浏览器 打开设置

3.打开扩展程序

4.开启开发者模式

5.开启后把下载好的 插件直接拖入浏览器的扩展程序界面即可 安装好效果

6.使用方式 我们利用一个 编写好的vue框架 编写的网页测试 打开f12 开发工具可以看见多了一个vue

7.我们可以通过工具 去动态改变值测试

7. 模板语法

Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。vue将模板编译成虚拟dom, 结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

html模板语法: 这是一种基于字符串的模板技术,以字符串和数据为输入,通过用正则表达式将占位符替换为所需数据的方式,构建出完整的 HTML 字符串

1.1 插值

1.1.1 文本

使用{{msg}}的形式,标签将会被替换成为数据对象(data)上msg属性值,当绑定的数据对象上的msg属性值发生变化时,插值处的值也会发生变化(双向绑定) 示例:上节课的hello vue示例使用的就是插值。

1.1.2 html

{{}}的方式将数据处理为普通文本,如果要输出html,需要使用v-html指令 示例: 在data中定义一个html属性,其值为html

data: {
    html:  '<input type="text" value="hello"/>'
}

在html中取值

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

1.1.3 属性

HTML属性中的值应使用v-bind指令。类型与jQuery中的$("#xxx").attr(propName, propVal) 示例,以修改元素的class属性为例: 定义一个样式

<style>
.redClass {
    font-size: 30px;
    color: red;
}
</style>

在data中定义一个属性,其值为上面定义的样式名

data: {
    red: 'redClass'
}

在html使用v-bind指令设置样式

在html使用v-bind指令设置样式

<p>设置之前:  holl word</p>
<p>设置之后: <span v-bind:class="red"> holl word</span></p>

在浏览器中可以看到相应的效果

1.1.4 表达式

几种常见的表达式:

  • {{str.substr(0,6).toUpperCase()}}

  • {{ number + 1 }}

  • {{ ok ? 'YES' : 'NO' }} 三元运算符

  • <li v-bind:>我的Id是js动态生成的</li>

示例1: 在html中加入元素,定义表达式

<span>{{str.substr(0,6).toUpperCase()}}</span>

在data中加入一个属性,名为str与html中对应

data: {
    str: 'hello vue'
}

查看效果:字符串被截取,并转换为大写

示例2:

<span>{{ number + 1 }}</span>

在data中加入一个属性,名为str与html中对应

data: {
    number: 10
}

在data中定义的number值将会被加1

示例3: 这是一个三元运算,如果ok为true,表达式值为YES ,如果ok为false则表达式值为NO

<span>{{ ok ? 'YES' : 'NO' }}</span>

在data中加入一个属性,名为str与html中对应

data: {
    ok: true
}

示例4: 演示id属性绑定和动态赋值

<p>
    <input type="text" v-bind:id="bookId"/></br>
    <!--动态生成Id-->
    <input type="text" v-bind:id="'bookList_' + id"/>
</p>
data: {
    bookId: 'book001',
    id: 'book002'
}

该示例可以通过开发者工具查看生成的id属性值。

1.2 指令

指令指的是带有“v-"前缀的特殊属性

1.2.1 核心指令

1.2.1.1 v-if |v-else-if|v-else

根据其后表达式的bool值进行判断是否渲染该元素, 指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论) 示例: HTML

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

JS

  var vm = new Vue({

        el: '#app',

        data: {
            type: 'C'
        }
    });

可以修改data中的type值观察页面的输出。

注: js = == === 之间的区别 一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false alert(1 == “1”); // true alert(1 === “1”); // false

1.2.1.2 v-show

与v-if类似,只是不会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"。 当v-show 表达式true则显示,否则不显示。 注意:使用v-show,虽然不显示,但在页面的dom中是存在的,只是display属性为none 示例: 在HTML中加入如下内容

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

在data中定义show属性

var vm = new Vue({
    el: '#app',
    data: {
        show: 'yes' 
    }
});

修改show值,观察页面显示

1.2.1.3 v-for

循环遍历

  • 遍历数组: v-for="item in items", items是数组,item为数组中的数组元素

  • 遍历对象: v-for="(value,key,index) in stu", value属性值, key属性名,index下标 示例: 定义一个div,使用v-for指令输出,items是vue实例中data中定义的对象数组

<!--数组-->
<div v-for="item in items">
     {{item.name}} -- {{item.id}}
</div>

<!--循环生成下拉列表-->
<div>
    <select >
        <option v-for="item in items" 
            v-bind:value="item.id">{{item.name}}</option>
    </select>
</div>

<!--对象-->
<div v-for="(o,key) in obj">
    {{key}}-{{o}}
</div>
var vm = new Vue({

    el: '#app',

    data: {
        itmes:[
            {name: 'zs',age:18},
            {name: 'ww',age:19},
            {name: 'ls',age:20},
            {name: 'zl',age:21}
        ],
        obj: {
            name:'张三',
            age: 21,
            addr: '湖南长沙'
        }
    }
});

1.2.1.4 v-on|v-model|v-for

创建一组多选框,可以获取到用户选择项

<!--
循环生成一组多选按钮,v-model通过vue的双向绑定将用户选择的项保存到
定义的selected组数中
-->
<div v-for="(item,index) in items">
    //监测 动态 v-model="selected"
    {{index}}:<input type="checkbox" v-bind:value="item.id"
            v-model="selected"
                     >{{item.name}}
</div>
<button v-on:click="getSelected()">获取选择</button>
var vm = new Vue({

    el: '#app',

    data: {
        type: 'C',
        show: 'no',
        items:[
            {name: '长沙',id:18},
            {name: '昆明',id:19},
            {name: '武汉',id:20},
            {name: '南京',id:21}
        ],
        obj: {
            name:'张三',
            age: 21,
            addr: '湖南长沙'
        },
        selected:[]
    },
    methods: {
        getSelected: function() {
            console.log(this.selected);
        }
    }
});

效果演示

1.2.1.5 参数 v-bind:href,v-on:click

示例:

<!--参数:href-->
<div>
    <a v-bind:href="url">baidu</a>
</div>

<!--
参数:动态参数.
attname需要在data中定义,
注意:attname要全部小写!!
-->
<div>
    <a v-bind:[attrname]="url">baidu</a>
    <button v-on:[evname]="clickme">点我看看</button>
</div>

注意:在动态参数中,作为参数的变量名(如:attrname)要全部小写,否则无效 !!

var vm = new Vue({

    el: '#app',

    data: {

        url: 'https://www.baidu.com',
        attrname:'href',
        evname: 'click'
    },

    methods: {
        clickme: function() {
            console.log("点到我了");
        }
    }

});

1.2.1.6 简写

Vue为v-bind和v-on这两个最常用的指令,提供了特定简写

指令简写示例
v-bind:xxx:xxxv-bind:href 简写为 :href
v-on:xxx@xxxv-on:click 简写为 @click

2. 过滤器

vue允许自定义过滤器,一般用于常见的文本格式化,过滤器可用的两个地方:双花括号插值v-bind表达式,过滤器应该被添加在js表达式的尾部,使用管道运算符"|"

2.1 局部过滤器

局部过滤器的定义:

var vm = new Vue({
    filters: {
        'filterName': function(value) {
            //过滤器实现
        }
    }
});

过滤器的使用

<!--双花括号中的使用-->
{{ name | capitalize }}

<!--在 v-bind 指令中的使用-->
<div v-bind:id="rawId | formatId"></div>
  • 注1:过滤器函数接受表达式的值作为第一个参数

  • 注2:过滤器可以串联 {{ message | filterA | filterB }}

  • 注3:过滤器是JavaScript函数,因此可以接受参数: {{ message | filterA('arg1', arg2) }}

示例:

<div>
    <p>{{msg | toUpperCase}}</p>
</div>
var vm = new Vue({

    el: '#app',

    data: {
        msg:"hello vue"
    },

    //局部过滤器
    filters:{
        toUpperCase: function(value) {
            return value.toUpperCase();
        }
    }

});

2.2 全局过滤器

拷入date.js(日期格式化)放入项目js目录中,在页面中引入。 定义全局过滤器  

//全局过滤器
Vue.filter('fmtDate',function(value) {
    return fmtDate(value, 'yyyy年MM月dd日')
});

过滤器的使用

<div>
    <p>{{date | fmtDate}}</p>
</div>

装换日期工具类

//给Date类添加了一个新的实例方法format
Date.prototype.format = function (fmt) {
	//debugger;
    var o = {
        "M+": this.getMonth() + 1,                 //月份
        "d+": this.getDate(),                    //日
        "h+": this.getHours(),                   //小时
        "m+": this.getMinutes(),                 //分
        "s+": this.getSeconds(),                 //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()             //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};

function fmtDate(date, pattern) {
	var ts = date.getTime();
    var d = new Date(ts).format("yyyy-MM-dd hh:mm:ss");
    if (pattern) {
        d = new Date(ts).format(pattern);
    }
    return d.toLocaleString();
};

3. 计算属性

计算属性用于快速计算视图(View)中显示的属性,这些计算将被缓存,并且只在需要时更新 使用场景:当一个属性需要复杂的逻辑运算之后才能获取其值,可以使用计算属性,在一个计算属性中可以完成各种复杂的逻辑,包括运算,方法调用等,只要最终返回一个结果就可以了 声明计算属性的格式:

computed:{
   xxx:function(){

   }
}

示例: 使用计算属性,计算书本的总价 定义测试数据,和计算属性,计算属性遍历书本记录,计算总价

var vm = new Vue({

    el: '#app',

    data: {
        //定义测试数据
        books: [
            {name:'红楼梦', price:"120"},
            {name:'三国演义', price:"100"},
            {name:'水浒传', price:"90"},
        ]
    },

    //计算属性
    computed: {
        compTotal: function() {
            let sum = 0;
            for(index in this.books) {
                sum += parseInt(this.books[index].price);
            }
            return sum;
        }
    }

});

计算属性在页面中的使用

<div v-for="book in books">
    {{book.name}} -> {{book.price}}
</div>

<div>
    总价:{{compTotal}}
</div>

关于varlet

  • var声明为全局属性

  • let为ES6新增,可以声明块级作用域的变量(局部变量)

  • 建议使用let声明变量

4.监听属性

使用场景:我们可以使用监听属性watch来响应数据的变量, 当需要在数据变化时执行异步或开销较大的操作时,这种方式比较有用。回想一下是否做过下拉列表的级联选择?

watch声明语法:

watch: {
    xxxx: function(val) {
        //监听器实现
    }
}

示例: 米和厘米的单位换算 设置监听器:

var vm = new Vue({

    el: '#app',

    data: {
        m: 1,
        cm: 100
    },

    //设置监听属性 属性变化
    watch: {
        m: function(val) {
            if(val)
                this.cm = parseInt(val) * 100;
            else
                this.cm = "";
        },
        cm: function(val) {
            if(val)
                this.m = parseInt(val) / 100;
            else
                this.m = "";
        }
    }

});

HTML中使用v-model实现与数据的双向绑定

<div>

    <!--注意v-model的双向绑定-->

    米:     <input type="text" v-model="m">

    厘米:  <input type="text" v-model="cm">

</div>

演示代码 

日期装好  js 下载

date.txt - 蓝奏云 下载好后 后缀 改为js即可

基本 文本用法 -过滤器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<!-- <script src="https://unpkg.com/vue@next"></script> -->
		<script src="js/v2.6.10/vue.js" type="text/javascript" charset="utf-8"></script>
	    <script src="js/date.js" type="text/javascript" charset="UTF-8"></script>
	</head>
	<body>
		<div id="app">
			{{ counter }}
			<input type="text"  v-model="msg"/>
			<button @click="onsbumt" >点击</button>
			
			<a v-bind:href="url">百度</a>
			{{str.substr(0,6).toUpperCase()}}
			{{number + 1}}
			{{ok ? "yes" : "no"}}
			<li v-bind:id="'list-' + id">动态id生成</li>
			<br />
			{{ str | filterA }}
			<div>
				{{date | dateFormat}}
			</div>
		</div>
		
		<script>
		//全局过滤器
		Vue.filter('dateFormat',function(data){
		return fmtDate(data,"yyyy年MM月dd日 hh时mm分ss秒")
		})
		
			var vm=new Vue(
			{
				el:"#app",
				data:{
					counter:"你好呀",
					msg:"ddd",
					url:"www.baidu.com",
					str:"hello world",
					number: 90,
					ok: true,
					id:"ood",
					date:new Date()
					
				},
				//交互事件
				methods:{
					onsbumt(){
						alert("1")
					}
				},
				//生命周期钩子
				created:function(){
					console.log("e")
				},
				//局部过滤器
				filters:{
					'filterA':function(str){
						return str.substr(0,1).toLocaleUpperCase() + str.substr(1); 
					}
				}
				
			}
			
			)
		</script>
	</body>
</html>

监听 - 计算函数

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
		 .redClass {
		     font-size: 30px;
		     color: red;
		 }
		</style>
	</head>
	<script src="js/v2.6.10/vue.js" type="text/javascript" charset="utf-8"></script>
	<body>
		
		
		
		<div id="app">
			
			<p :class="red">
				holl word
			</p>
			
			
			
			
			<span v-html="html"></span>

			<p>
			<div v-if="type == 'c'">
				c
			</div>
			<div v-else-if="type == 'b'">
				b
			</div>
			<div v-else>
				无
			</div>

			</p>
			<!--数组-->
			<div v-for="item in items">
				{{item.name}} -- {{item.age}}
			</div>

			<!--循环生成下拉列表-->
			<div>
				<select>
					<option v-for="item in items" v-bind:value="item.age">{{item.name}}</option>
				</select>
			</div>

			<!--对象-->
			<div v-for="(o,key) in obj">
				{{key}}-{{o}}
			</div>

			<!--
			循环生成一组多选按钮,v-model通过vue的双向绑定将用户选择的项保存到
			定义的selected组数中
			-->
			<div v-for="(item,index) in items">
				{{index}}:<input type="checkbox" v-bind:value="item.age" v-model="selected">{{item.name}}
			</div>
			<button @click="getSelected()">获取选择</button>
			<br />
			book = {{compTotal}}
			<p>
			<div>
				<!--注意v-model的双向绑定-->
				米: <input type="text" v-model="m">
				厘米: <input type="text" v-model="cm">
			</div>
			</p>

		</div>


		<script>
			var vm = new Vue({
				el: "#app",
				data: {
					html: '<input type="text" value="hello"/>',
					type: "b",
					items: [{
							name: 'zs',
							age: 18
						},
						{
							name: 'ww',
							age: 19
						},
						{
							name: 'ls',
							age: 20
						},
						{
							name: 'zl',
							age: 21
						}
					],
					obj: {
						name: '张三',
						age: 21,
						addr: '湖南长沙'
					},
					selected: [],
					books: [{
							name: '红楼梦',
							price: "120"
						},
						{
							name: '三国演义',
							price: "100"
						},
						{
							name: '水浒传',
							price: "90"
						},
					],
					m: 1,
					cm: 100,
					red:"redClass"

				},
				methods: {
					getSelected() {
						console.log(this.selected)
					}
				},
				//计算属性
				computed: {
					compTotal: function() {
						let sum = 0;
						for (index in this.books) {
							sum += parseInt(this.books[index].price);
						}
						return sum;
					}
				},
				watch: {
					m: function(val) {
						if (val)
							this.cm = val * 100;
						else
							this.cm = "";
					},
					cm: function(val) {
						if (val)
							this.m = val / 100;
						else
							this.m = "";
					}
				}
			})
		</script>

	</body>
</html>

嘴强程序员
关注 关注
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue的基本使用和概述
m0_46978034的博客
11-03 295
文章目录一.Vue的概述二.Vue的基本使用三. Vue代码运行原理 一.Vue的概述 Vue:渐进式JavaScript框架 声明式渲染→组件系统→客户端路由→集中式状态管理>项目构建 二.Vue的基本使用 Vue的基本使用步骤 需要提供标签填充数据 引入vue.js库文件 使用Vue语法模板 把Vue提供的数据填充到标签里面 1、提供标签用于填充数据 <div id="app"> <div></div> </div> 2、引入v
Vue - 快速入门,这一套就够了!(Vue core + 案例 + 效果演示)
热门推荐
CYK_byte的博客
10-16 2万+
前置条件:掌握 HTML、CSS、JavaScript、AJAX.工具:VsCode.插件:Live Server(浏览器实时预览)Ps:建议都提前下载下来,没网的时候也能用.
Vue介绍
最新发布
ssjssj_的博客
09-12 1395
什么是Vue介绍Vue了解Vue
Vue入门
BAIQW的博客
07-07 821
vue是一个构建用户界面UI的渐进式javascript框架,渐进式的框架是指可以一步一步的由浅入深的去使用这个框架,该框架可以逐步引入项目。作者:尤雨溪vue官网 https://cn.vuejs.org/1.体积小 压缩后33k左右,体积小意味着下载速度很快。运行快,数据传输快。2.更高的运行效率 基于虚拟dom,一种预先通过javascript进行各种计算,把最终的DOM操作计算出来并进行优化的技术。所谓虚拟dom指的是对真实dom的一种模拟。相对于直接操作真实dom,我们构建一棵虚拟的dom树,将各
vue介绍
weixin_58678797的博客
11-28 2874
一、vue的简单介绍 1.简介 插件:日历插件、轮播图、选项卡。 框架:bootstrap。能够独立做来一个一个网页(项目就是由每一个网页组成 ) 响应式布局的项目 vue是渐进式 JavaScript 框架 渐进式 :主张最少。最大的特点是没有DOM操作。主张只操作数据 。 2.优点 1.轻量级的数据框架 2.双向数据绑定 3.提供了指令 4.组件化开发 5.客户端路由 6.状态管理:同cookie、session、本地存储类似 3.缺点 1.Vue 底层基于 Object.defi
VUE 介绍
weixin_34150224的博客
12-15 83
1、概述 简单小巧:vue.js压缩后17k。 渐进式:一步一步有阶段性的使用。   2、MVVM模式 View的变动,自动更新至 ViewModel,反之亦然。   3、vue示例代码 &lt;!DOCTYPE html&gt; &lt;html lang="zh"&gt; &lt;head&gt; &lt;meta charset="U...
Vue 介绍
weixin_48183870的博客
05-06 1112
官方网址:Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org)Vue是一个构建用户界面的渐进式框架。它的核心库专注于视图层,使得开发者能够便捷地构建单页面应用。Vue通过简洁的API实现了响应式的数据绑定和组合的视图组件。Vue的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件。Vue具有轻量级和易上手的特点,因此在国内得到了广泛的应用和喜爱。渐进式框架(Incremental Framework)是一种软件开发过程中的架构设计方法。
vue3-element-admin:vue3-element-admin后台管理系统前端解决方案
04-17
- 熟悉 es6 基本语法 - 熟悉 vite 特性 - 熟悉 Vue 基础语法 Vue-Router-Next - 熟悉 vue-router@4 基本使用 Element-Plus - ui 基本使用 Mock.js - mockjs 基本语法 安装使用 # 克隆项目 git clone ...
可视化大屏 Vue3 版本vue-big-screen-plugin-master.zip
04-04
使用这个插件时,开发者需要对Vue3有一定的了解,包括其基本语法、响应式系统和Composition API的运用。同时,熟悉JavaScript或TypeScript,以及一定的数据可视化基础知识也是必要的。对于初学者,可以参考官方文档...
本项目是基于Vuepress框架 Vuepress-theme-hope主题搭建的一个个人学习笔记文档站点,项目内记.zip
02-23
7. `markdown`:Vuepress 的 Markdown 增强配置,比如自定义 Markdown 混合、扩展语法等。 8. `kwan1117`:这个文件或目录可能是作者的学习笔记,具体内容可能包括 JavaScript前端开发、Vue.jsVuepress 使用教程...
jessibuca-vue-ts-demo-3 ts语法实例
03-21
通过对"jessibuca-vue-ts-demo-3"项目的深入研究,开发者不仅能掌握TypeScript的基本语法,还能了解到如何在实际的Vue.js项目中有效地应用这些语法,提升开发体验和代码质量。这个示例项目是一个很好的学习资源,...
vue-admin-template-4.4.0.zip
03-01
Vue.js 是一款流行的轻量级前端JavaScript框架,它以其易学易用、高效灵活的特点深受开发者喜爱...通过深入研究和实践,开发者不仅可以掌握Vue.js的基本原理,还能了解到前端工程化、状态管理和前后端交互等高级主题。
Vue介绍
boysky0015的博客
08-27 447
1.声明式渲染 Vue.js的核心是一个允许采用简单的模板语法来声明式的将数据渲染进DOM<div id="app"> </div> var app = new Vue({ el: '#app', data: { message: "Hello Vue!" } })除了文本插值之外,我们还可以采用这样的方式绑定DOM元素属性:<div id="app">
VUE2介绍
顺其自然~专栏
09-27 432
你可能已经注意到 Vue 组件非常类似于自定义元素——它是Web 组件规范的一部分,这是因为 Vue 的组件语法部分参考了该规范。例如 Vue 组件实现了Slot API与isattribute。但是,还是有几个关键差别:1)Web Components 规范已经完成并通过,但未被所有浏览器原生实现。目前 Safari 10.1+、Chrome 54+ 和 Firefox 63+ 原生支持 Web Components。
vue - Vue介绍
萌兔兔MMQ!!
05-09 692
一.初始化Vue脚手架 1.说明 一般脚手架选择最新版本 2.具体步骤 全局安装vue/cli脚手架 切换到项目目录,运行 vue create 加一个非主流库的名字 即可创建一个vue项目 运行 npm run serve 将项目在服务器跑起来 上面为本地服务器地址,下面如果有同事,那就可以访问同一个局域网内的地址 可以看到vue默认为我们创建了一个hello word的组件 3.分析项目结构 用vue脚手架创建了一个项目后会发现如下的结构 首先从根目录的文件入手,第一个.gitignore就
介绍Vue
hickey96的专栏
12-03 432
一、Vue.js 是什么        Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。      Vue.js 的目标是...
写文章

热门文章

  • 微信小程序介绍 22694
  • WebSocket的基本使用 14653
  • springBoot自动装配 11164
  • css超链接样式+雪碧图实现导航 9907
  • 微信小程序框架 9759

最新评论

  • java中常用的集合

    Lpy2569: 写的很不错

  • 音乐播放器-- 以及数据库数据存储

    捎上清风: 求源代码表情包

  • Gateway限流的使用

    Frandows: 楼主能出一期你的IDEA是怎么配置主题的吗?感觉太好看了

  • SpringCloud Gateway网关的使用与介绍

    豆浆加冰: 又是一个没版本的

  • RabbitMQ延迟列队的使用

    _wink_: rabbitmq有插件支持延迟队列的、就不用设置死信队列、还有超时时间那么麻烦了

最新文章

  • 音乐播放器-- 以及数据库数据存储
  • 微信小程序微信账号登录
  • 微信小程序后台数据交互与wxs文件的介绍与使用
2023年9篇
2022年130篇
2021年27篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司许昌网站排名优化有哪些网站优化推广代办机构宣城百度网站优化公司沈阳求推荐好的网站推广与优化网站优化咨询客服哪家好自己如何做网站优化网站关键字优化设计呈贡网站优化品牌企业网站优化的益处怎么优化一个网站的关键词武威百度网站优化绥芬河网站推广优化网站优化团队北京优化网站莆田市网站seo优化费用广告网站怎么优化网站主题优化原则抚顺网站优化联系电话按天收费优化网站兰州网站权重优化方案松原网站优化找哪家怎么优化学习网站专业网站优化团队如何 对自己的网站搜索优化嘉定区正规网站优化价格谷歌网站优化有用吗网站做优化憾沟云速捷高端优化网站信赖易速达诸暨网站优化长春搜索网站优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化