[转]AngularJS 实现 Table的一些操作(示例大于实际)

本文转自:http://www.cnblogs.com/lin-js/p/linJS.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="lib/angular.js"></script>
    <style type="text/css">
    table {
        border: 1px solid #ccc;
        border-collapse: collapse;
    }
    td,
    th {
        height: 40px;
        width: 90px;
        border: 1px solid #ccc;
        text-align: center;
    }
    input {
        height: 100%;
        width: 100%;
        border: none;
    }
    .readonly {
        background: green;
    }
    .active {
        background: #ddd;
    }
    td.options {
        width: 400px;
        text-align: left;
    }
    td.options>input {
        width: 100px;
    }
    </style>
</head>

<body ng-app="mapp">

    <table ng-controller="mtable">
        <tr>
            <th>姓名</th>
            <th>年龄</th>
            <th>学号</th>
            <th>兴趣</th>
            <th>Options</th>
        </tr>

        <tr ng-repeat="item in items" ng-controller="row">
            <td>
                <input type="text" ng-model="item.name" ng-readonly="varlist.isreadonly" value={ {item.name}} ng-class="{true:‘inactive‘,false:‘active‘}[varlist.isreadonly]" placeholder="name">
            </td>
            <td>
                <input type="text" ng-model="item.age" ng-readonly="varlist.isreadonly" value={ {item.age}} ng-class="{true:‘inactive‘,false:‘active‘}[varlist.isreadonly]" placeholder="age">
            </td>
            <td>
                <input type="text" ng-model="item.id" ng-readonly="varlist.isreadonly" value={ {item.id}} ng-class="{true:‘inactive‘,false:‘active‘}[varlist.isreadonly]" placeholder="id">
            </td>
            <td>
                <input type="text" ng-model="item.interest" ng-readonly="varlist.isreadonly" value={ {item.interest}} ng-class="{true:‘inactive‘,false:‘active‘}[varlist.isreadonly]" placeholder="interseting">
            </td>
            <td class="options">
                <!-- 编辑 -->
                <edit></edit>
                <!-- 删除当前行 -->
                <delete></delete>
                <!-- 放弃所有编辑 -->
                <reset></reset>
            </td>
        </tr>
        <tr>
            <!-- 增加一行 -->
            <td colspan="5">
                <add></add>
            </td>
        </tr>
    </table>
    <script type="text/javascript">
    var app = angular.module("mapp", []);
    app.controller("mtable", function($scope) {
        // 数据源
        $scope.items = [{
            name: "张三",
            age: 20,
            id: 111,
            interest: "看书"
        }, {
            name: "李四",
            age: 22,
            id: 222,
            interest: "写字"
        }, {
            name: "王二小",
            age: 23,
            id: 333,
            interest: "电影"
        }, {
            name: "隔壁老王",
            age: 5,
            id: 444,
            interest: "泡妞"
        }];
        // 为 reset功能而做的准备,ng中数组的复制,注意使用 angular.copy()和不使用的效果
        $scope.resetArr = angular.copy($scope.items);

        // 接收删除事件,使用 splice()而不是slice()
        $scope.$on("remove", function(event, data) {
            $scope.items.splice(data, 1);
        });

    // ng-repeat 重复元素上面定义的ng-controller互不影响
    }).controller("row", function($scope) {
        $scope.varlist = {
            isreadonly: true
        }
        // 接收edit事件,因为不用jquery,所以使用ng-readonly指令来操作
        $scope.$on("edit", function() {
            $scope.varlist.isreadonly = false;
        });
    });
    // 下面是四个指令

    app.directive("edit", function() {
        return {
            restrict: "E",
            replace: true,
            // 这里是在模版中使用ng-click绑定事件,请试试在指令 上绑定事件的方式,有坑
            template: "<input type = ‘button‘ value = ‘edit‘ ng-click=‘edit()‘>",
            link: function(scope, element, attr) {
                scope.edit = function() {
                    // 传递的true值是给 $scope.varlist.isreadonly 使用的,意思是改变只读状态
                    scope.$emit("edit", true);
                }

            }
        }
    }).directive("delete", function() {
        return {
            restrict: "E",
            replace: true,
            template: "<input type = ‘button‘ value = ‘delete‘ ng-click=‘remove($index)‘>",
            link: function(scope, element, attr) {
                scope.remove = function($index) {
                    scope.$emit("remove", $index);

                }
            }
        }
    }).directive("reset", function() {
        return {
            restrict: "E",
            replace: true,

            template: "<input type = ‘button‘ value = ‘reset‘ ng-click=‘reset($index)‘>",
            link: function(scope, element) {
                //代码很简单,但是你丫就是想不起来使用angualr.copy()
                scope.reset = function($index) {
                    scope.items[$index] = angular.copy(scope.resetArr[$index]);
                }

            }
        }
    }).directive("add", function() {
        return {
            restrict: "E",
            template: "<button ng-click = ‘add()‘>增加新行</button>",
            replace: true,
            link: function(scope) {
                scope.add = function() {
                    // 数据驱动
                    scope.items.push({});
                }
            }
        }
    });
    </script>
</body>
</html>
时间: 2024-08-28 19:22:57

[转]AngularJS 实现 Table的一些操作(示例大于实际)的相关文章

Android SQLite数据库操作示例

SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外,它还是开源的,任何人都可以使用它. SQLite由以下几个组件组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展SQLite的内核变得更加方便. SQLite支持的数据类型参考链接:http://blog.csdn.net/wzy_1988/article/details/36005947 Android在运行时(

flashback之——挖掘SCN(DDL和DML操作示例)

------------------------------------------------------------------------------------------- 1.查询当前日志组21:43:00 [email protected]>select * from v$log;          1    1    36   52428800   512     1 NO  CURRENT     1349824 2.查询日志文件 21:42:44 [email protect

用gdb分析core文件及常见gdb命令操作示例

1.概述 在实际的软件开发项目中,程序出现问题是在所难免的.遥想本人参加工作之后首次遇到程序的情景,至今还历历在目.之前的经验告诉我,我们越是惊慌失措,问题就越是解决不了.我们要先让自己平静下来,然后再寻找解决程序问题的办法. 在Linux下做开发的朋友,想必都与core文件打过交道.当看到自己的程序运行之后出现core时,很多人都慌乱了,仿佛天快要塌下来一样.其实,我们大可不必如此,只要我们掌握了用gdb调试core文件的办法,依然可以很快定位程序问题,一举将bug消灭掉.有关Linux co

java 线程 原子类相关操作示例 thinking in java4 目录21.3.4

java 线程  原子类相关操作示例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; /** * 原子类,

java目录相关操作 示例代码

package org.rui.io; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; /** * 目录列表器 测试 * * @author lenovo * */ //Args:"C:/Users/lenovo/Pictures/screen/*\.jpg" public class DirList { public

Table行合并操作

此方法不可取,但几天心血 保留,已有新想法,稍后会出一个完善的Table行列合并方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <

字符串去空格以及反转操作示例

1.字符串去空格 package tan; public class CopyOfStringTest { public static void main(String[] args) { String s = " tan at guigu "; sop(s); String x = MyTrim(s); sop(x); } public static void sop(String str) { System.out.println(str); } // 1.去除字符串两端的空格 p

验证码接收平台原理和网页版运行操作示例

现在市面上能够使用的验证码接收平台有:    Y码:www.yma0.com 牛码:www.niuma.org 接码:www.7vs.net 极码:www.yzm8.net 这些平台得以实现的运行原理: 思路:       A:获得验证码:      1.找到相关的表.      2.用什么发送,post,get ,ajax,当然ajax首选      3.post之前要js先判断是手机号码11位,并且全部都是数字,或者用正则也行.      4.用ajax发送数据data,要对数据进行检验,过

alter table新增字段操作究竟有何影响?(上篇)

很久以前就有个疑问,见过一些表设计时会留出几个reverse的字段,目的是为了以后扩展,但此时设计的字段类型.长度等都是预计的,未来是否可用,不好说,那为什么会这么做呢?可能的原因是:"我现在设定好字段,需要的时候直接用就行了,不需要新增字段的操作". 那么,问题就是,新增字段的操作究竟有什么影响?增加表字段的时候,是否会锁表?对DML.DDL有什么影响?如果搞清楚这些,才能对上面的问题给出科学的答案. 为了证明增加字段的操作究竟做了什么,有什么影响,打算使用10046事件来看看. S