前端主流框架vue学习笔记第一篇

发布时间 - 2026-01-11 02:31:29    点击率:

vue应该是前端主流框架中的集大成者,它吸取了knockout,angular,react设置avalon的经验,支持各种模式写法,入门很简单,从本章开始,会记录学习vue中的点点滴滴,以笔记的形式形成博文。

1、Hello World

和任何框架一样,使用前必先引入,我们这里直接使用cdn资源,创建index.html,编写如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>demo1</title>
  <script src="https://cdn.bootcss.com/vue/2.4.1/vue.js"></script>
</head>
<body>
  <div id="app">
    {{message}}
  </div>
  <script>
    new Vue({
      el:'#app',
      data:{
        message:'hello world'
      }
    })
  </script>
</body>
</html>

双击文件运行:

咱们分析一下上述代码,一句简单的{{message}},就把数据绑定到到了dom中,我不会说好神奇,因为我熟悉angular,我知道angular也是简单一个指令就可以做到,这里和angular在使用上做一个类比,可以看到,在当前的代码中创建Vue对象的时候,传递的参数{el:'#id',data:{message:'hellow'}},其中el是vue挂载的元素,也就是作用的范围和anglar中ng-app的概念类似,都是创建一个根作用域,data对象可以类比angular中的$scope,$scope对象在angular中是连接controller和view的桥梁,那么data对象就是代理vue对象中数据和template的桥梁。

2、TODO LIST

由于有angular的经验,不会按部就班的过vue的文档,那样也没什么意思,这里以todolist作为Hello world的延伸,由于和angular类似的数据驱动的特点,我们不需要关注如何操作dom,我们只要设计viewmode即可,todolist,首先我们要有todo item ,所以

var todoItem=function(title,desc){
      this.title=title;
      this.desc=desc;
    }

另外todolist 是包含CURD的,所以我们需要一个表单,用来新增todoItem,基于此修改index.html,添加表单部分:

<div id="app">
    <form>
      <input type="text" v-model="title"> <br>
      <input type="text" v-model="desc"> <br/>
      <input type="button" value="add todo item" v-on:click="addItem()" />
    </form>
  </div>

对上述代码做一下简单说明:v-model类似angular中ng-model,实现双向数据绑定,当然这里都是语法糖,vue内部做了很多工作,和angular2+中的[(ngModel)]类似,通过属性和事件实现了双向绑定效果,v-on:click="addItem()" ,其中v-on:是事件绑定指令,后面click是参数,可以缩写为@click="addItem()" ,可以类比angular中ng-click。

接下来,继续完善我们的viewmodel,todoitem已经设计完成,现在我们增加todolist结构,todolist中包含多个todoitem,是todoitem集合,在javascript中,体现为Array,基于此修改我们的代码,如下:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>demo1</title>
  <script src="https://cdn.bootcss.com/vue/2.4.1/vue.js"></script>
</head>

<body>
  <div id="app">
    <form>
      title:<input type="text" v-model="title"> <br>
      desc:<input type="text" v-model="desc"> <br/>
      <input type="button" value="add todo item" v-on:click="addItem()" />
    </form>
  </div>
  <script>
    var TodoItem = function (title, desc) {
      this.title = title;
      this.desc = desc;
    }
    new Vue({
      el: '#app',
      data: {
        todolist:[],
        title:'',
        desc:''
      },
      methods:{
        addItem:function(){
          this.todolist.push(new TodoItem(this.title,this.desc))

          this.title=this.desc='';

          console.log(JSON.stringify(this.todolist));
        }
      }
    })
  </script>
</body>

</html>

上述代码中出现了新的属性methods,和angular中不同,angular中事件也是绑定在$scope对象中的,只不过值是function而已,在vue中,对事件绑定和属性绑定进行了区分,分别使用data和methods代理,这样也在逻辑上更清晰,指责上更单一,所以事件绑定的回调函数都代理在methods中。

刷新页面,输入表单项,打开控制台可以看到输出项,运行结果入下图所示:

结果和我们预期的一样,接着我们把结果以列表的形式渲染出来,在angular中,我们一般通过ng-repeat指令,实现列表渲染,那么在vue中,有没有类似的指令呢,查文档发现的确有一指令叫做v-for,用法和作用都和ng-repeat类似,基于ng-repeat经验,我们使用v-for对todolist进行渲染,修改代码如下:

<table style="width:300px;border-collapse:collapse" border="1">
      <tr>
        <th>title</th>
        <th>desc</th>
      </tr>
      <tr v-for="todoItem in todolist">
        <td>{{todoItem.title}}</td>
        <td>{{todoItem.desc}}</td>
      </tr>
    </table>

刷新运行,在表单中输入后,点击add todo item,向数组添加元素,及动态刷新了列表:

有添加就有删除,接下来,我们列表中,增加删除操作,和所有mvvm框架一样,我们考虑的出发点一定要规避dom,一定要从数据驱动UI的方式来思考,如果删掉UI项,那么根据数据驱动UI的理念那么就是删掉数组项,框架会自动帮我们处理dom,基于此修改代码如下:

<table style="width:300px;border-collapse:collapse" border="1">
      <tr>
        <th>title</th>
        <th>desc</th>
        <th></th>
      </tr>
      <tr v-for="(todoItem,index) in todolist">
        <td>{{todoItem.title}}</td>
        <td>{{todoItem.desc}}</td>
        <td><input type="button" value="remove" @click="remove(index)" /></td>
      </tr>
    </table>

如果按照我们以前angular的使用经验,这里增加的方式有些区别,angular在ng-repeat中有内置变量$index,所以在事件处理上,我们就会通过$index作为数组项索引,事件绑定也会类似ng-click="remove($index)",在vue中就有些区别了,但是却符合数组遍历的方式,大家应该知道数组方法,比如map等,参数是一个function,其中包含两个参数,第一个参数是value,第二个参数是index是一个道理,从这一点上说,这样写很符合道理,因为这本身就是一个循环遍历,同样vue对象methods中添加remove方法。

new Vue({
      el: '#app',
      data: {
        todolist:[],
        title:'',
        desc:''
      },
      methods:{
        addItem:function(){
          this.todolist.push(new TodoItem(this.title,this.desc))

          this.title=this.desc='';

        },
        remove:function(index){
          this.todolist.splice(index,1);
        }

      }
    })

刷新运行页面:

完整代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>demo1</title>
  <script src="https://cdn.bootcss.com/vue/2.4.1/vue.js"></script>
  <style>
    table{
      margin-top: 5px;
      width:300px;
      border-collapse: collapse;
      border: 1px solid #ccc; 
    }
    table > tr>th,table>tr>td{
      height: 25px;
      line-height: 25px;
    }

  </style>
</head>

<body>
  <div id="app">
    <form>
      title:<input type="text" v-model="title"> <br>
      desc:<input type="text" v-model="desc"> <br/>
      <input type="button" value="add todo item" v-on:click="addItem()" />
    </form>
    <table style="width:300px;border-collapse:collapse" border="1">
      <tr>
        <th>title</th>
        <th>desc</th>
        <th></th>
      </tr>
      <tr v-for="(todoItem,index) in todolist">
        <td>{{todoItem.title}}</td>
        <td>{{todoItem.desc}}</td>
        <td><input type="button" value="remove" @click="remove(index)" /></td>
      </tr>
    </table>
  </div>
  <script>
    var TodoItem = function (title, desc) {
      this.title = title;
      this.desc = desc;
    }
    new Vue({
      el: '#app',
      data: {
        todolist:[],
        title:'',
        desc:''
      },
      methods:{
        addItem:function(){
          this.todolist.push(new TodoItem(this.title,this.desc))

          this.title=this.desc='';

        },
        remove:function(index){
          this.todolist.splice(index,1);
        }

      }
    })
  </script>
</body>

</html>

今天就先到这里,增删改查,查询和修改还没有,放在(二)中进行添加吧,敬请期待。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue  # 前端框架  # webpack学习教程之前端性能优化总结  # 聊聊那些使用前端Javascript实现的机器学习类库  # 前端主流框架vue学习笔记第二篇  # 前端框架学习总结之Angular、React与Vue的比较详解  # 新手学习前端之js模仿淘宝主页网站  # asp.net基础学习之前端页面布局  # 前端学习笔记style  # currentStyle  # getComputedStyle的用法与区别  # 0基础学习前端开发的一些建议  # 绑定  # 表单  # 都是  # 是一个  # 遍历  # 可以看到  # 上更  # 有一  # 就会  # 文档  # 还没有  # 放在  # 也会  # 第一个  # 一句  # 多个  # 也没  # 就有  # 不需要  # 也在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解jQuery中的事件  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  html5的keygen标签为什么废弃_替代方案说明【解答】  如何自定义建站之星网站的导航菜单样式?  Laravel怎么在Controller之外的地方验证数据  Laravel怎么使用Intervention Image库处理图片上传和缩放  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何获取免费开源的自助建站系统源码?  怎么用AI帮你设计一套个性化的手机App图标?  详解Huffman编码算法之Java实现  bing浏览器学术搜索入口_bing学术文献检索地址  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  如何挑选最适合建站的高性能VPS主机?  如何快速选择适合个人网站的云服务器配置?  Swift中循环语句中的转移语句 break 和 continue  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel怎么为数据库表字段添加索引以优化查询  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  PHP正则匹配日期和时间(时间戳转换)的实例代码  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  js实现点击每个li节点,都弹出其文本值及修改  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  如何在新浪SAE免费搭建个人博客?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel如何自定义分页视图?(Pagination示例)  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel怎么实现模型属性的自动加密  Laravel模型事件有哪些_Laravel Model Event生命周期详解  微信公众帐号开发教程之图文消息全攻略  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  微信推文制作网站有哪些,怎么做微信推文,急?  昵图网官方站入口 昵图网素材图库官网入口  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  桂林网站制作公司有哪些,桂林马拉松怎么报名?  🚀拖拽式CMS建站能否实现高效与个性化并存?  Windows Hello人脸识别突然无法使用  javascript读取文本节点方法小结  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  WEB开发之注册页面验证码倒计时代码的实现