vue初体验:实现一个增删查改成绩单

前端变化层出不穷,去年NG火一片,今年react,vue火一片,ng硬着头皮看了几套教程,总被其中的概念绕晕,react是faceback出品,正在不断学习中,同时抽时间了解了vue,查看了vue官方文挡,看完格外入眼,总觉得要拿来试一试手。

正好周未,做一个小成绩单玩玩,以前有用avalon也做过一个类似的:http://www.cnblogs.com/xwwin/p/5203334.html 从过程来看,二个框架都在避免开发者频繁操作dom,脱离dom苦海,安心处理数据业务逻辑,从二个示例来看,可以成倍的提高开发效率。

vue示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue成绩单</title>
    <style type="text/css">
        *{
            margin:0;
            padding:0;
        }
        .report_card{
            width:800px;
            margin:0 auto;
            font-size:12px;
        }
        .report_card table{
            width:100%;
            border-collapse: collapse;
            text-align:center;
        }
        .report_card caption{
            font-size:14px;
            text-align:left;
            line-height:30px;
            font-weight:bold;
        }
        .report_card table th,.report_card table td{
            border:1px solid #ccc;
        }
        .report_card table th{
            height:36px;
            background:#f8f8f8;
        }
        .report_card table td{
            height:32px;
            background:#f8f8f8;
        }
        .content{
            width:100%;
            height:32px;
            line-height:32px;
            position:relative;
        }
        .content input{
            position:absolute;
            top:0;
            left:0;
            width:100%;
            color:#999;
            padding-left:10px;
            -webkit-box-sizing:border-box;
            box-sizing:border-box;
            height:30px;
            border:1px solid blue;
            -webkit-animation:borderAn 2s infinite;
            animation:borderAn 2s infinite;
        }
        .studyForm select{
            width:100px;
            height:28px;
        }
        .searchInput{
            width:200px;
            height:28px;
        }
        .searchButton{
            width:100px;
            height:32px;
        }
        @-webkit-keyframes borderAn{
            0%{
                border-color:transparent;
            }
            100%{
                border-color:blue;
            }
        }
        @keyframes borderAn{
            0%{
                border-color:transparent;
            }
            100%{
                border-color:blue;
            }
        }
        .studyForm{
            margin:10px 0;
        }
        .studyForm input{
            width:120px;
            height:30px;

        }
    </style>
</head>
<body>
    <div class="report_card" id="reportCard">
        <table class="studyForm">
            <caption>成绩录入/处理</caption>
            <tbody>
                <tr>
                    <td width="170">学号:<input type="text" v-model="addArr.stuId"></td>
                    <td width="170">姓名:<input type="text" v-model="addArr.name"></td>
                    <td width="170">语文:<input type="text" v-model="addArr.ywScores"></td>
                    <td width="170">数学:<input type="text" v-model="addArr.sxScores"></td>
                    <td colspan="2" width="120">
                        <a href="javascript:void(0);" v-on:click="submitStu">录入</a>
                        <a href="javascript:void(0);" v-on:click="resetStu">重置</a>
                    </td>
                </tr>
                <tr>
                    <td align="left">
                        搜索:<input v-model="searchTxt" type="text" class="searchInput">
                    </td>
                    <td>
                        排序字段:
                        <select v-model=‘sortKey‘>
                            <option value="ywScores">语文</option>
                            <option value="sxScores">数学</option>
                        </select>
                    </td>
                    <td>
                        排序类型:
                        <select v-model="sortClass">
                            <option value="1">升序</option>
                            <option value="-1">降序</option>
                        </select>
                    </td>
                    <td colspan="3"></td>
                </tr>
            </tbody>
        </table>
        <table class="scoreList">
            <caption>成绩列表</caption>
            <thead>
                <th width="170">学号</th>
                <th width="170">姓名</th>
                <th width="170">语文</th>
                <th width="170">数学</th>
                <th colspan="2" width="120">操作</th>
            </thead>
            <tbody>
                <tr v-for="item in studyArr | filterBy searchTxt | orderBy sortKey sortClass">
                    <td><div class="content">{{item.stuId}}<input v-model="editArr.stuId" type="text" v-if="$index==nowEditCol"></div></td>
                    <td><div class="content">{{item.name}}<input v-model="editArr.name" type="text" v-if="$index==nowEditCol"></div></td>
                    <td><div class="content">{{item.ywScores}}<input v-model="editArr.ywScores" type="text" v-if="$index==nowEditCol"></div></td>
                    <td><div class="content">{{item.sxScores}}<input v-model="editArr.sxScores" type="text" v-if="$index==nowEditCol"></div></td>
                    <td>
                        <a href="javascript:void(0);" v-on:click="startEdit($index)" v-if="$index!=nowEditCol">编辑</a>
                        <a href="javascript:void(0);" v-on:click="cancelEdit" v-if="$index==nowEditCol">取消</a>
                        <a href="javascript:void(0);" v-on:click="sureEdit($index)" v-if="$index==nowEditCol">确认</a>
                    </td>
                    <td><a href="javascript:void(0);" v-on:click="deleteStu($index)">删除</a></td>
                </tr>
            </tbody>
        </table>
    </div>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript">
        var studyArrJson=[
            {‘stuId‘:‘stu0001‘,‘name‘:‘张三‘,‘ywScores‘:85,‘sxScores‘:90},
            {‘stuId‘:‘stu0002‘,‘name‘:‘李四‘,‘ywScores‘:88,‘sxScores‘:85},
            {‘stuId‘:‘stu0003‘,‘name‘:‘王五‘,‘ywScores‘:65,‘sxScores‘:75},
            {‘stuId‘:‘stu0004‘,‘name‘:‘刘六‘,‘ywScores‘:58,‘sxScores‘:96}
        ];
        var reportCardVm=new Vue({
            el:‘#reportCard‘,
            data:{
                studyArr:studyArrJson,//成绩花名册
                addArr:{‘stuId‘:‘‘,‘name‘:‘‘,‘ywScores‘:‘‘,‘sxScores‘:‘‘},//新增的表单字段
                nowEditCol:-1,//当前编辑的行
                editStatus:false,//当前是否在编辑状态
                searchTxt:‘‘,//搜索字段
                sortKey:‘ywScores‘,//排序健
                sortClass:‘1‘,//升降排序1为升,-1为降
            },
            methods:{
                //启动索引index数据编辑
                startEdit:function(index){
                    this.nowEditCol=index;
                },
                //取消编辑状态
                cancelEdit:function(){
                    this.nowEditCol=-1;
                },
                //启动索引index数据修改确认
                sureEdit:function(index){
                    this.studyArr.$set(index,this.editArr);
                    this.nowEditCol=-1;
                },
                //删除索引index数据
                deleteStu:function(index){
                    this.studyArr.splice(index,1);
                },
                //新增成绩
                submitStu:function(){
                    var addArr={
                        ‘stuId‘:this.addArr.stuId,
                        ‘name‘:this.addArr.name,
                        ‘ywScores‘:this.addArr.ywScores,
                        ‘sxScores‘:this.addArr.sxScores
                    };
                    this.studyArr.push(addArr);
                    this.resetStu();
                },
                //复位新增表单
                resetStu:function(){
                    this.addArr={
                        ‘stuId‘:‘‘,
                        ‘name‘:‘‘,
                        ‘ywScores‘:‘‘,
                        ‘sxScores‘:‘‘
                    }
                }
            },
            computed:{
                //存储当前编辑的对象
                editArr:function(){
                    var editO=this.studyArr[this.nowEditCol];
                    return {
                        ‘stuId‘:editO.stuId,
                        ‘name‘:editO.name,
                        ‘ywScores‘:editO.ywScores,
                        ‘sxScores‘:editO.sxScores
                    }
                }
            }
        })
    </script>
</body>
</html>

在线测试地址:http://jsbin.com/kavugufuci/edit?html,output

时间: 2024-10-20 02:16:40

vue初体验:实现一个增删查改成绩单的相关文章

Sqlite数据库增删查改操作

1.SqliteOpenHelper为数据库抽象类,需创建一个类继承他,其中有onCreate创建数据库的抽象方法和onUpgrade升级数据库方法(一般用不上). 1 //创建数据库的类 2 //SQLiteOpenHelper抽象类 onCreate和onUpgrade抽象方法 3 public class MySqliteHelper extends SQLiteOpenHelper { 4 5 //新建数据库以及表 6 private String SqlCpData="create t

Java数据库编程之JDBC增删查改

前言 众多的ORM框架使我们从原生的JDBC编码摆脱出来,但在学习数据库编程之初,应该先掌握底层的JDBC编程,熟练应用后,学起框架才会更得心应手.就像金庸笔下的武侠人物,只要内功深厚,再去学习其他武功绝学,只不过是招式罢了.正所谓,温故而知新,本文回顾了最基础的JDBC增删查改操作. 连接数据库 在之前一篇随笔讲过如何连接数据库——<Java数据库编程之JDBC配置>. 数据库连接工具类 DBConnection package database; import java.sql.*; im

c++中的顺序表写法,主要实现(增删查改,构造函数,运算符重载)

本文的内容主要是,利用c++写出顺序表,并对写出的代码进行测试, 主要实现的功能:实现对顺序表的增删查改, 要写的函数:构造函数,赋值运算符重载,析构函数.在编写代码过程中应注意到深浅拷贝问题. 下面是顺序表的类函数: #pragma once #include<iostream> using namespace std; typedef int DataType; class SeqList { public: SeqList(); SeqList(DataType *array, size

nodejs连接mysql并进行简单的增删查改

最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs中的mysql模块 npm install mysql 在连接数据库之前,要先引入nodejs连接处理mysql的模块 var mysql = require('mysql'); 类似php连接mysql的方式,编写连接代码 //使用nodejs处理mysql的模块,使用创建连接方法,创建与mysq

EF实现增删查改功能

In the previous tutorial you created an MVC application that stores and displays data using the Entity Framework and SQL Server LocalDB. In this tutorial you'll review and customize the CRUD (create, read, update, delete) code that the MVC scaffoldin

在MVC程序中,使用泛型仓储模式和工作单元实现增删查改

在这片文章中,我将自己动手为所有的实体:写一个泛型仓储类,还有一个工作单元. 工作单元的职责就是:为每一个实体,创建仓储实例.仓储(仓库)的职责:增删查改的功能实现. 我们将会在控制器中,创建工作单元类(UnitOfWork)的实例,然后根据实体,创建仓储实例,再就是使用仓储里面的方法,做操作了. 下面的图中,解释了,仓储和EF 数据上文的关系,在这个图里面,MVC控制器和仓储之间的交互,是通过工作单元来进行的,而不是直接和EF接触. 那么你可能就要问了,为什么要使用工作单元??? 工作单元,就

asp.net MVC最简单的增删查改!(详)

折腾了两天搞出来,但原理性的东西还不是很懂,废话不多说上图上代码 然后右键models,新建一个数据模型 注意我添加命名为lianxi 添加后如上 接下来在controllers添加控制器还有在Views中添加视图 注意控制器lianxi和视图的名字要一致,然后视图我是添加了3个分别是Index,insert,Modify,在控制器里分别有三个对应的函数 每当用URL访问视图时,他就调用了controllers对应的方法,例如 jiaEntities 就是建立模式时那个数据链接的名字      

基于MVC实现增删查改

1.首先要理解MVC的架构.新建一个web项目取名叫Service. 2.建立eneity(实体包),tools(连接数据库),DAO(借助result的代码实现增删查改)servlet(实现跳转). 3.在建立实体时一定要和数据库中的字段名一致,否则在运行时会出错.连接数据库时一定要注意数据库名和密码. 4.在DAO层中实现增删查改的语句,并测试,代码如下: public class userDAO {  public List getAllUser(){//查询 String SQL="se

实现基本的增删查改功能

1. In the previous tutorial you created an MVC application that stores and displays data using the Entity Framework and SQL Server LocalDB. In this tutorial you'll review and customize the CRUD (create, read, update, delete) code that the MVC scaffol