Vuejs——(1)入门(单向绑定、双向绑定、列表渲染、响应函数)

版权声明:出处http://blog.csdn.net/qq20004604

目录(?)[+]

参照链接:

http://cn.vuejs.org/guide/index.html

【起步】部分

本文是在其基础上进行补全和更详细的探寻

嗯,根据朋友的建议,我改投vue阵营了

(一)单向绑定

[javascript] view plain copy

  1. <div id="app">
  2. {{ message }}
  3. </div>
  4. <script>
  5. new Vue({
  6. el: ‘#app‘,
  7. data: {
  8. message: ‘Hello Vue.js!‘
  9. }
  10. })
  11. </script>

①el应该表示绑定的意思,绑定id=app这个标签

也可以改为以下这样:

[javascript] view plain copy

  1. <div class="app">
  2. {{ message }}
  3. </div>

[javascript] view plain copy

  1. el: ‘.app‘,

一样有效。

但如果是多个的话,只对第一个有效

[html] view plain copy

  1. <div class="app">
  2. {{ message }}
  3. </div>
  4. <div class="app">
  5. {{ message }}
  6. </div>

Hello Vue.js!

{{ message }}

②data里的message变量,表示{{message}的值

(二)双向绑定

[javascript] view plain copy

  1. <div id="app">
  2. {{ message }}
  3. <br/>
  4. <input v-model="message"/>
  5. </div>
  6. <script>
  7. new Vue({
  8. el: ‘#app‘,
  9. data: {
  10. message: ‘Hello Vue.js!‘
  11. }
  12. })
  13. </script>

效果是:

①input输入框里有初始值,值是data里的message属性的值;

②修改输入框的值可以影响外面的值;

(三)函数返回值

[javascript] view plain copy

  1. <div id="app">
  2. {{ message() }}
  3. <br/>
  4. <input v-model="message()"/>
  5. </div>
  6. <script>
  7. new Vue({
  8. el: ‘#app‘,
  9. data: {
  10. message: function () {
  11. return ‘Hello Vue.js!‘;
  12. }
  13. }
  14. })
  15. </script>

效果:

①输出值也是message的返回值;

②缺点:失去双向绑定!

(四)渲染列表

[javascript] view plain copy

  1. <div id="app">
  2. <ul>
  3. <li v-for="list in todos">
  4. {{list.text}}
  5. </li>
  6. </ul>
  7. </div>
  8. <script>
  9. new Vue({
  10. el: ‘#app‘,
  11. data: {
  12. todos: [
  13. {text: "1st"},
  14. {text: "2nd"},
  15. {text: "3rd"}
  16. ]
  17. }
  18. })
  19. </script>

v-for里的list,类似for in里面的i,

个人认为,

①可以把list in todos,理解为for list in todos

②然后把下一行的list.text理解为 todos[list].text

然后这个v-for标签在哪里,就是以他为单位进行多次复制。

(五)处理用户输入

[javascript] view plain copy

  1. <div id="app">
  2. <input v-model="message">
  3. <input type="button" value="值+1" v-on:click="add"/>
  4. <input type="button" value="值-1" v-on:click="minus"/>
  5. <input type="button" value="重置归零" v-on:click="reset"/>
  6. </div>
  7. <script>
  8. new Vue({
  9. el: ‘#app‘,
  10. data: {
  11. message: 1
  12. },
  13. methods: {
  14. add: function () {
  15. this.message++; //这步要加this才能正确获取到值
  16. },
  17. minus: function () {
  18. this.message--;
  19. },
  20. reset: function () {
  21. this.message = 0;
  22. }
  23. }
  24. })
  25. </script>

效果:

①对输入框的值,点击一次add按钮,则值+1;

②如果不能加,则像正常表达式加错了那样返回结果,例如NaN;

③data里的message的值,是初始值;

④methods里是函数集合,他们之间用逗号分隔;

⑤获取值的时候,要加上this,例如this.message获取的是message的值。

(六)多功能

[javascript] view plain copy

  1. <div id="app">
  2. <input v-model="val" v-on:keypress.enter="addToList">
  3. <ul>
  4. <li v-for="val in values">
  5. {{val.val}}
  6. <input type="button" value="删除" v-on:click="removeList($index)"/>
  7. </li>
  8. </ul>
  9. </div>
  10. <script>
  11. new Vue({
  12. el: ‘#app‘,
  13. data: {
  14. val: "1",
  15. values: []
  16. },
  17. methods: {
  18. addToList: function () {
  19. var val = parseInt(this.val.trim());  //注意,因为当上面的val是字符串类型的时候,才能用trim(),如果是数字类型,则用this.val
  20. if (val) {
  21. this.values.push({val: val});
  22. }
  23. this.val = String(val + 1);
  24. },
  25. removeList: function (index) {
  26. this.values.splice(index, 1);
  27. }
  28. }
  29. })
  30. </script>

效果:

①初始输入框内值为1;

②在输入框内按回车键,则会将输入框的内容转为数字,并添加到一个列表里,该列表里转换后的数字和一个删除按钮,并且输入框内的值,变为转为数字后的值加一。

如图:

③他的添加,利用的是双向绑定,将输入的值push到data里面的values这个数组之种,然后利用渲染列表的效果,输出多行值。

④在button标签里,函数的参数名给了一个参数,是该行索引,参数名是$index

⑤标签里,触发的函数的函数名,可以加括号,也可以不加括号,实测似乎是没有影响的。

(七)标签和API总结(1)

① {{ 变量名 }}

表示绑定的变量,调用时需要用this.变量名

② v-model=”变量”

双向绑定使用,如果input里不加任何type就是文本,如果加type就是type,例如:

[javascript] view plain copy

  1. <input v-model="DATE" type="date"/>
  2. <li>{{DATE}}</li>

就会将日期类型的输入框的值,和li标签显示的内容绑定在一起。

③ v-on:click=”函数名”

点击时触发该函数,可加()也可以不加,

$index作为参数表示索引,索引值从0开始。

④ v-for

双向绑定的在数组内容更新后,会实时更新,v-model也是;

类似for in语句,被多次使用的是

⑤ v-on:事件

即触发的事件,有click(点击),keypress(按键按下)

事件后面可以跟更具体的,例如keypress.enter是回车,keypress.space是空格等

更多的需要之查看

⑥ new vue

通过new一个vue的实例,然后传一个对象作为参数给这个实例;

其中:

el 表示绑定的模板(只会匹配到绑定的第一个)

data 表示数据,可以直接被取用,例如用在v-model或者是{{变量名}}

methods 表示方法

 函数内部调用变量

通过this.变量名,例如:

[javascript] view plain copy

  1. data: {
  2. val: "1",
  3. values: []
  4. },
  5. methods: {
  6. addToList: function () {
  7. console.log(this.val);

这里的this.val就是上面的data.val,也是html里的{{val}},也是v-model=”val”,但不是

[javascript] view plain copy

  1. <li v-for="val in values">
  2. {{val.val}}
  3. <input type="button" value="删除" v-on:click="removeList($index)"/>
  4. </li>

里面的val.val,至于原因,个人认为是这里的val处于v-for的作用域内,因此val in values 里的val其在作用域链中的优先级更高

时间: 2024-12-10 17:05:54

Vuejs——(1)入门(单向绑定、双向绑定、列表渲染、响应函数)的相关文章

面试问题:Vuejs如何实现双向绑定

最近出去面试,栽在这个问题上,提到vuejs,面试官一般会让你说vuejs的特点,一般就要回答virtual dom tree, dom tree diff, 以及数据双向绑定,然后面试官会追问你,vuejs是如何实现数据双向绑定的,前面的问题算基础的话,能答出这个就更上一个台阶,说明你的思考能力不停留在表层,遗憾的是我只能大概说出Object.defineProperty.我回来搜了一下,发现其实vuejs的官网对这个原理是有详尽的阐释的,如果失败了只能怪自己准备不足.这篇文章我就整理一下分享

【vue】跟着老马学习vue-数据双向绑定

学习了node.js教程,只能说是有了一定的了解,之前也了解了webpack和es6的核心内容,也看过vue2.0的官网教程,并结合视频看过项目,但是理解和运用仍然存在很多问题,接下来的一段时间,跟着老马学习vue 学习链接:http://aicoder.com/vue/preview/all.html#1 vue最大的特点就在于它的双向绑定,是一个前端的双向绑定类的框架. 一说到vue我们就应该立刻想到以下几部分:1.数据双向绑定:2.列表渲染.条件渲染:3.事件处理:4.生命周期:5.组件化

剖析Vue原理&amp;实现双向绑定MVVM

剖析Vue原理&实现双向绑定MVVM vue.js 双向绑定 javascript 邓木琴居然被盗用了 2016年08月16日发布 推荐 24 推荐 收藏 195 收藏,10.6k 浏览 本文能帮你做什么?1.了解vue的双向数据绑定原理以及核心代码模块2.缓解好奇心的同时了解如何实现双向绑定为了便于说明原理与实现,本文相关代码主要摘自vue源码, 并进行了简化改造,相对较简陋,并未考虑到数组的处理.数据的循环依赖等,也难免存在一些问题,欢迎大家指正.不过这些并不会影响大家的阅读和理解,相信看完

AngularJS学习笔记(三)数据双向绑定

双向绑定 双向绑定是AngularJS最实用的功能,它节省了大量的代码,使我们专注于数据和视图,不用浪费大量的代码在Dom监听.数据同步上,关于双向更新,可看下图: 下面,我们通过代码来实现.先不要纠结其中不明白的地方,先来体验下数据绑定的效果. 数据-->视图 这里我们只演示有了数据以后,如何绑定到视图上. <!DOCTYPE html> <html ng-app="App"> <head> <script type="tex

谈谈对vue的认识2:双向绑定 v-model

1:v-model指令 数据的双向绑定 双向绑定是说我们不仅仅可以通过数据(M)的改变去影响视图(V),还是当视图的内容改变(V)去影响模型中的数据(M) 通常来说双绑定应用在表单中比较多 指令: vue对html元素拓展是一些属性名称(自定义属性名称) Vue指令有个特点,都是以v-开头的 V-model,它提供了一个js环境,在他的属性之中我们可以使用js(vue实例化对象)中的变量,将表单元素的值与vue实例化对象中是数据属性同步,实现视图到模型中的数据的一个绑定,因此在表单元素上添加了v

Angular系列----AngularJS入门教程05:双向绑定(转载)

在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f step-4 你应该发现除了搜索框之外,你的应用多了一个下来菜单,它可以允许控制电话排列的顺序. 步骤3和步骤4之间最重要的不同在下面列出.你可以在GitHub里看到完整的差别. 模板 app/index.html Search: <input ng-model="query"&g

[转载]AngularJS入门教程04:双向绑定

在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f step-4 你应该发现除了搜索框之外,你的应用多了一个下来菜单,它可以允许控制电话排列的顺序. 步骤3和步骤4之间最重要的不同在下面列出.你可以在GitHub里看到完整的差别. 模板 app/index.html Search: <input ng-model="query"&g

ng1中 如何用双向绑定 实现单向绑定的初始时不显示双括号效果?

ng1中 如何用双向绑定 实现单向绑定(ng-bind就可以不显示{{}})的初始时不显示双括号效果? AngularJS 实例 页面加载时防止应用闪烁: <div ng-app=""> <p ng-cloak>{{ 5 + 5 }}</p> </div> 尝试一下 » 定义和用法 ng-cloak 指令用于在 AngularJS 应用在加载时防止 AngularJS 代码未加载完而出现的问题. AngularJS 应用在加载时,文档可能

第二章 Vue快速入门--13 讲解v-model实现表单元素的数据双向绑定

1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width,initial-scale=1.0"> 7 <title>Document</title> 8