Vue.js先入个门看看

 使用vue.js原文介绍:Vue.js是一个构建数据驱动的web界面库。Vue.js的目标是通过尽可能简单的API实现响应式数据绑定组合的视图组件。vue.js上手非常简单,先看看几个例子:

    例一:Helloworld

    html代码:

<div id="app">{{ message }}</div>

    js代码:

new Vue({el: '#app',data: {message: 'Hello Vue.js!'}
})

    例二:双向绑定

    说明:html中以v-开头的标记都是vue.js提供的标记。v-model属性表示数据模型。

    html代码:

<div id="app"><p>{{ message }}</p><input v-model="message"></div>

    js代码:

new Vue({el: '#app',data: {message: 'Hello Vue.js!'}
})

    例三:渲染列表

    说明:v-for表示遍历集合数据,下面的代码遍历集合todos并输出每项。

    html代码:

<div id="app"><ul><li v-for="todo in todos">{{ todo.text }}        </li></ul></div>

    js代码:

new Vue({el: '#app',data: {todos: [{ text: 'Learn JavaScript' },{ text: 'Learn Vue.js' },{ text: 'Build Something Awesome' }]}
})

    例四:事件绑定

    说明:v-on是vue.js特性,表示绑定事件方法。

    html代码:

<div id="app"><p>{{ message }}</p><button v-on:click="reverseMessage">Reverse Message</button></div>

    js代码:

new Vue({el: '#app',data: {message: 'Hello Vue.js!'},methods: {reverseMessage: function () {            this.message = this.message.split('').reverse().join('')}}
})

    看完上面的4个例子,感觉vue.js挺容易入门,确实是这样,不得不说vue.js深受开发人员喜爱,简单易学。前面的例子只是展示了如何使用vue.js,但它到底包含了哪些功能?vue.js提供了两大核心功能:响应的数据绑定、视图组件化。接下来我们看看vue.js是怎么定义这两大功能的。

两大核心功能:响应的数据绑定、视图组件化

    响应的数据绑定:vue.js拥抱数据驱动的概念,一当DOM和数据绑定,Dom将会和数据保持同步,数据有变动DOM会立即渲染,在也不用担心数据变更后DOM如何渲染的问题。并且如果手动修改数据绑定的DOM元素的值,数据模型也会被同步。因为vue.js支持双向绑定。绑定过程如下图所示:

    视图组件化:vue支持抽象组件化,我们整个系统可以使用若干个小的组件构造,例如下面是一个html页面对应的摸快。整个系统可分为三个大的组件:app-nav、app-sidebar、app-content,app-sidebar下又包含两个小组件,app-content下包含三个小组件。这些组件也相当于是自定义的DOM元素,我们可以直接使用。  

    html代码:

<div id="app"><app-nav></app-nav><app-view><app-sidebar></app-sidebar><app-content></app-content></app-view></div>

     前面简单介绍了vue的主要功能,接下来我们详细的看看在实际项目开发中,vue.js到底给我们提供了哪些方面的功能。

数据绑定语法

    1.文本绑定:在html的文本字符串中,可以通过{{}}格式包含vue特性。

<span>Message: {{ msg }}</span>

    2.单向绑定:只同步一次,如果msg特性值有变化,html中的文本不会被更新。

<span>This will never change: {{* msg }}</span>

    3.输出包含html的数据:1和2中的代码不支持输出html代码,需要用下面的格式。

<div>{{{ raw_html }}}</div>

    4.html属性值绑定

<div id="item-{{ id }}"></div>

    5.支持javascript表达式

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

    6.过滤器:vue提供了属性过滤功能,下面的代码message是一个特性,filterA是一个过滤函数,最终输出为filterA(message)的结果。

{{ message | filterA }}

    7.判断语法:如果条件成立则输出结果,条件不成立无任何输出。

<p v-if="greeting">Hello!</p>

    8.html属性绑定:下面代码和:<a href={{url}}”></a>和效果一样,其实最终也会转换为v-bind模式。

<a v-bind:href="url"></a>

    9.事件绑定:使用v-on为html的事件属性绑定方法。

<a v-on:click="doSomething">

    10.v-bind缩写:下面的第一段代码为v-bind的完整写法,第二段代码为缩写方式。

<!-- 完整语法 --><a v-bind:href="url"></a><!-- 缩写 --><a :href="url"></a><!-- 完整语法 --><button v-bind:disabled="someDynamicCondition">Button</button><!-- 缩写 --><button :disabled="someDynamicCondition">Button</button>

    11.v-on缩写:和v-bind相似,区别在于v-on用@符号表示,而v-bind用:表示。

<!-- 完整语法 --><a v-on:click="doSomething"></a><!-- 缩写 --><a @click="doSomething"></a>

    vue提供的语法让开发人员很方便的完成view和model的动态绑定,vue不仅提供特性和html元素属性的绑定,它对css和style支持也比较完善。

Class与Style绑定

    1.class绑定对象特性:vue绑定class支持直接绑定json字符串格式设置。下面代码vue实例包含isA和isB两个类型为布尔的属性,可供元素的class直接绑定。下面的html代码有人会有疑问:在div上写了两次class属性。这个问题不用担心,vue会自动把两个class属性合并成一个。

    html代码:

<div class="static" v-bind:class="{ 'class-a': isA, 'class-b': isB }"></div>

    js代码:

data: {isA: true,isB: false}

    输出结果:

<div class="static class-a"></div>

    2.class字节绑定对象:vue支持直接给class属性绑定对象,这样写也更灵活些。

    html代码:

<div v-bind:class="classObject"></div>

    js代码:

data: {classObject: {        'class-a': true,        'class-b': false}
}

    3.数组语法:class属性可直接绑定一个数组,数组里边的项为vue实例特性。

    html代码:

<div v-bind:class="[classA, classB]">

    js代码:

data: {classA: 'class-a',classB: 'class-b'}

条件渲染

    1.v-if和v-else:下面代码如果条件为true则输出yes,否则输出no。

<h1 v-if="state === 1">Yes</h1><h1 v-else>No</h1>

    2.template v-if输出多条html元素:v-if和template标签配合使用可嵌入多个html标签,当着模板使用,最终输出值包含html元素。

<template v-if="state === 1"><h1>Title</h1><p>Paragraph 1</p><p>Paragraph 2</p></template>

    3.v-show和v-else: 和v-if相似,都作为条件判断,不同点在于渲染的区别。v-if只有等条件成立时才会渲染html元素,而v-show不管条件是否成立都会渲染,如果条件不成立则设置元素的display为none。

    4.v-show和组件混合使用问题:将v-show用在组件上时,由于指令优先级v-else会出问题,所以不要使用v-else。下面代码是错误的:

<custom-component v-show="condition"></custom-component><p v-else>这可能也是一个组件</p>

    应该这样写:

<custom-component v-show="condition"></custom-component><p v-show="!condition">这可能也是一个组件</p>

列表渲染

    1.语法v-for:通过v-for可遍历js对象集合,然后用可以直接输出每一项的数据。下面的代码直接用文本输出items的每项数据。

    html代码:

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

    js代码:

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

     2.获取遍历项索引:使用v-for遍历有时候想得到每一项的索引值,可通过 index i n d e x 直 接 获 取 , index是vue直接提供的特性。我们也可以给索引取别名:

<div v-for="(idx, item) in items">{{ idx }} {{ item.message }}</div>

    3.template和v-for:有时候我们想每次输出多条html标签,那么我们可通过v-for和template配合使用达到效果:

<ul><template v-for="item in items"><li>{{ item.msg }}</li><li class="divider"></li></template></ul>

    4.操作数组:vue提供了一些数组操作方法,包括push、pop、shift、unshift、splice、sort、reverse等。如果我要对vue实例example1的集合特性items添加项,可以使用:

example1.items.push({message: ‘Baz’});

    如果要过滤数组选项,可以使用filter函数。例如下面的代码找出item属性message包含Foo的选项集合:

example1.items = example1.items.filter(function (item) {    return item.message.match(/Foo/)
})

    5.数组操作问题

    不能直接使用数组索引设置元素,例如vm.items[0] = {},这样设置的话,vue是不能检测到数组的变化。可使用set方法:

example1.items. set(0, { childMsg: 'Changed!'})

    不能直接修改数组长度,这样设置后vue检测不到变化。可直接使用一个空数组替换:

example1.items = [];

    6.对象v-for:v-for也可直接遍历对象属性。

    html代码:

<ul id="repeat-object" class="demo"><li v-for="value in object">{{ $key }} : {{ value }}    </li></ul>

    js代码:

new Vue({el: '#repeat-object',data: {object: {FirstName: 'John',LastName: 'Doe',Age: 30}}
})

方法与事件处理器

    1.方法处理器:使用v-on监听DOM事件,例如

    html代码:

<div id="example"><button v-on:click="greet">Greet</button></div

    js代码:

var vm = new Vue({el: '#example',data: {name: 'Vue.js'},    // 在 `methods` 对象中定义方法    methods: {greet: function (event) {            // 方法内 `this` 指向 vmalert('Hello ' + this.name + '!')            // `event` 是原生 DOM 事件            alert(event.target.tagName)}}
})

    2.如何传递参数:可直接传递字符串或者对象,如果想传递事件对象可以使用$event:

<buttonv−on:click="say(′hello!′,eventHtml:<buttonv−on:click="say(′hello!′, event)">Submit</button>

    js代码和其他绑定一样:

// ...methods: {say: function (msg, event) {        // 现在我们可以访问原生事件对象        event.preventDefault()}
}

    3.数据逻辑和事件逻辑隔离:为了让数据模型只处理数据逻辑,而不混杂其他逻辑,vue.js提供了两个事件修饰符.prevent和.stop。

<!-- 阻止单击事件冒泡 --><a v-on:click.stop="doThis"></a><!-- 提交事件不再重载页面 --><form v-on:submit.prevent="onSubmit"></form><!-- 修饰符可以串联 --><a v-on:click.stop.prevent="doThat"><!-- 只有修饰符 --><form v-on:submit.prevent></form>

    4.按键修饰符:可以使用按键编码或者别名。

<!-- 只有在 keyCode 是 13 时调用 vm.submit() --><input v-on:keyup.13="submit"><!-- 同上 --><input v-on:keyup.enter="submit"><!-- 缩写语法 --><input @keyup.enter="submit">

    vue.js提供的别名包括:enter、tab、delete、esc、space、up、down、left、Right。

    vue.js也支持自定义别名,例如我们想控制F1按键事件,可以先给F1(编码为112)定义一个别名:

// 可以使用 @keyup.f1Vue.directive('on').keyCodes.f1 = 112

    直接使用别名即可:

<input v-on:keyup.f1="doSomething">

表单控件绑定

    1.text控件:如果修改了text控件的值,span绑定的message会不同更新。

<span>Message is: {{ message }}</span><br><input type="text" v-model="message" placeholder="edit me">

    2.checkbox控件

<input type="checkbox" id="checkbox" v-model="checked"><label for="checkbox">{{ checked }}</label>

    多个checkbox绑定:每个checkbox绑定一个类型为数组的数据模型checkedNames。

    html代码:

input type="checkbox" id="jack" value="Jack" v-model="checkedNames"><label for="jack">Jack</label><input type="checkbox" id="john" value="John" v-model="checkedNames"><label for="john">John</label><input type="checkbox" id="mike" value="Mike" v-model="checkedNames"><label for="mike">Mike</label><br><span>Checked names: {{ checkedNames | json }}</span>

    js代码:

new Vue({el: '...',data: {checkedNames: []}
})

    3.radio

<input type="radio" id="one" value="One" v-model="picked"><label for="one">One</label><br><input type="radio" id="two" value="Two" v-model="picked"><label for="two">Two</label><br><span>Picked: {{ picked }}</span>

    4.select

    单选:

<select v-model="selected"><option selected>A</option><option>B</option><option>C</option></select><span>Selected: {{ selected }}</span>

    多选:

<select v-model="selected" multiple><option selected>A</option><option>B</option><option>C</option></select><br><span>Selected: {{ selected | json }}</span>

    select的option也可以动态通过v-for方式渲染。

    html代码:

<select v-model="selected"><option v-for="option in options" v-bind:value="option.value">{{ option.text }}</option></select><span>Selected: {{ selected }}</span>

    js代码:

new Vue({el: '...',data: {selected: 'A',options: [{ text: 'One', value: 'A' },{ text: 'Two', value: 'B' },{ text: 'Three', value: 'C' }]}
})

     以上的内容都是本人跟着官网学习记录的笔记,内容都比较偏向基础,如有哪些地方介绍有误望各位指正。vue.js还有一个比较重要的知识点:组件。下篇内容应该主要分享vue.js组件,有需要的同学可关注下。

原文地址:http://www.cnblogs.com/w-wanglei/p/5851472.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java path 注解_@PathVariable注解的使用和@Requestparam

一、 PathVariablePathVariable这是一个路径映射格式的书写方式注解&#xff0c;在类映射路径的后加上/{对应方法参数中属性PathVariable("code")中的code}&#xff0c;SuppressWarnings({ "unchecked", "rawtypes" })RequestMapping(value &qu…

近5年133个Java面试题 你会几个?

https://blog.csdn.net/fireblue1990/article/details/73695121 http://www.ablanxue.com/shtml/201608/33470_1.shtml

精选30道Java笔试题解答

转载自 精选30道Java笔试题解答 1. 下面哪些是Thread类的方法&#xff08;&#xff09; A start() B run() C exit() D getPriority() 答案&#xff1a;ABD 解析&#xff1a;看Java API docs吧&#xff1a;http://docs.oracle.com/javase/7/docs/ap…

.NET Core 1.0.1 发布了

今天微软发布了 .NET Core 1.0.1&#xff0c;这是 .NET Core 1.0 的首个微软长期支持更新&#xff0c;同时发布的还有 ASP.NET Core 1.0.1 与 Entity Framework Core 1.0.1。 .NET Core 1.0.1 中的主要更新与 bug 修复&#xff1a; Segfaults on Linux 4.6 – coreclr 6016; co…

java this用法_java中this用法小结

Java关键字this只能用于方法方法体内。当一个对象创建后&#xff0c;Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针&#xff0c;这个指针的名字就是this。因此&#xff0c;this只能在类中的非静态方法中使用&#xff0c;静态方法和静态的代码块中绝对不能出现this,并且…

第1步 新建spring+springmvc+mybatis项目 每步都有 讲解 巨详细

Idea2017部署项目到tomcat时没有artifacts解决办法 2017年12月01日 23:16:22 剑胜 阅读数&#xff1a;10342 在Idea2017中想部署maven构建的项目到tomcat容器中时&#xff0c;需要配置Deployment属性&#xff0c;选择war或者war exploded的发布方式。而要进行这个配置首先要点…

Java 集合系列04之 fail-fast总结

转载自 Java 集合系列04之 fail-fast总结概要 前面&#xff0c;我们已经学习了ArrayList。接下来&#xff0c;我们以ArrayList为例&#xff0c;对Iterator的fail-fast机制进行了解。内容包括&#xff1a;&#xff1a;1 fail-fast简介2 fail-fast示例3 fail-fast解决办法4 fai…

Vue.js说说组件

什么是组件&#xff1a;组件是Vue.js最强大的功能之一。组件可以扩展HTML元素&#xff0c;封装可重用的代码。在较高层面上&#xff0c;组件是自定义的元素&#xff0c;Vue.js的编译器为它添加特殊功能。在有些情况下&#xff0c;组件也可以是原生HTML元素的形式&#xff0c;以…

java 内存快照怎么看_jvm内存快照dump文件太大,怎么分析

1、场景通常&#xff0c;使用eclipse的mat图形化工具打开dump的时候都会内存溢出.对于比较小的dump&#xff0c;eclipse可以打开&#xff0c;但一旦dump文件太大&#xff0c;eclipse就有点束手无策。这时候怎么办呢&#xff1f;可以使用linux下的mat&#xff0c;既Memory Analy…

第3步 (请先看第2步再看第3步) 新建完spring+springmvc+mybatis项目 需要推送gitee仓库进行管理 巨详细

idea中Terminal终端无法执行GIT命令&#xff1a; touch README.md问题解决 解决方法二&#xff1a; ◆更改路径即可 Git\bin\bash.exe 或 Git\bin\sh.exe 然后重新启动idea即可 ********************88注意&#xff1a;每次更改完成后需要重新启动IDEA****************** 记…

115个Java面试题和答案——终极列表(下)

转载自 115个Java面试题和答案——终极列表&#xff08;下&#xff09;第一篇讨论了面向对象编程和它的特点&#xff0c;关于Java和它的功能的常见问题&#xff0c;Java的集合类&#xff0c;垃圾收集器&#xff0c;本章主要讨论异常处理&#xff0c;Java小应用程序&#xff0…

java编译提示错误信息_JAVA编译错误提示缺少“{”

展开全部有点粗心了 我把我修改过的发62616964757a686964616fe58685e5aeb931333335323435给你具体问题&#xff1a;是extends不是extands类Circle拼错Circle构造方法height拼错abstract class Shape{public int width,height;public Shape(int width,int height){this.widthwid…

谈谈这些年前端的变化

我从事web开发工作到现在差不多四年了&#xff0c;前后台都涉及过&#xff0c;近两年两年前端开发为主。我记得11年的时候&#xff0c;我到南京的第一年&#xff0c;加入了一个电商公司&#xff0c;从事PHP开发&#xff0c;那个时候公司里面有一个女孩子&#xff0c;专门从事前…

第2步 安装git 配置git用户 git的安装和项目的建立

安装git 比较简单 在window上是有个 git bash 这个命令集成了一部分window和linux的命令 在任意目录下(一般是项目工程目录下面) 右键点击git bash 进入之后 小写字母 i 进入编辑模式&#xff08;insert模式出入&#xff09; [user] nameyjb1091947832(注册…

jsp连接mysql数据库 例子_JSP 连接 MySQL 数据库的例子

一&#xff1a;数据库 1. 正确install mysql 2. mysql -h localhost -u root -p 3. create database shujuku; 4. grant all privileges on shujuku.* to testlocalhost identified by "12345"; 5. use shujuku; 6. create table biao (id int(8) primary key, name…

115个Java面试题和答案——终极列表(上)

转载自 115个Java面试题和答案——终极列表&#xff08;上&#xff09;本文我们将要讨论Java面试中的各种不同类型的面试题&#xff0c;它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力。下面的章节分为上下两篇&#xff0c;第一篇将要讨论面向对象编程和它的特点&…

依赖注入的威力,.NET Core的魅力:解决MVC视图中的中文被html编码的问题

有园友在博问中提了这样一个问题 —— .NET Core 中文等非英文文字html编码输出问题&#xff0c;到我们的 ASP.NET Core 项目中一看&#xff0c;也是同样的问题。 比如下面的Razor视图代码&#xff1a; {ViewBag.Title "代码改变世界"; }<title>ViewBag.Title…

第4步 tomcat配置中文字符集 启动Tomcat  网页乱码

第二部&#xff1a;给页面上添加mate标签 <html> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <head> 然而并没什么效果。于是我就去掉这种无用的操作。换另外一种方案。 第三部&#xff1a;在tomcat的配置中…

自己动手开发编译器(我们的朋友 -- 装配脑袋走了)

编者: 昨天在微信群里得知 我们的朋友--装配脑袋(施凡老师),因白血病离我们而去,自从得病以来,施老师在积极的接受治疗&#xff0c;8.27 得到的消息还是比较让人开心的,大家都在期待着他能够重出江湖。装配脑袋一直在从事一个编译器项目,在博客园的博客里有个系列《自己动手开发…