angularjs和ajax的构成使用 (二)

先行出示一个网上的一个复选功能的例证:

一个人口夜间纪念家的时段才亮,那时自己叫你找东西的总人口,是一个孩对你满满的仗,因为我晓得我老爸太好最神。

澳门葡京手机网址 1澳门葡京手机网址 2

恩爱的老爸,生日快乐。

为取得上述那种格式的数据 本来在服务端编写这样的代码 以性之章程呈现:

老范同志,再过几个钟头,你的大庆便顶了,我尚未呀精神的事物被你,买礼物要生党要花费你的钱,想了纪念,我时最好深之财富也便是这些字了,仔细回想发现而留给了自身十九年,我还从来不出色地形容过你为算遗憾。

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 5     <title>多选</title>
 6     <script type="text/javascript" src="../jquery-easyui-1.4.3/jquery.min.js"></script>
 7     <script type="text/javascript" src="../angularJs/angular.js"></script>
 8     <script>
 9         function myCtr($scope) {
10             //实现多选 看了网上的一个 又是弄中间变量 又是操作dom
11             //no 数据 组织方式  这才是angular way   ,根本不需要那么多操作 只需要操作数据 你只需要操作数据  看简简单单 清清爽爽
12             //按说的话这种需求是比较少的 如果设计功能的时候 你非要整这么个 那么没办法 数据结构就是这样 你就得这么做 别想偷懒
13             //你必须得形成这样一种数据结构了 交给前端 
14             $scope.ar = [{ id: 1, name: "basketball", st: true }, { id: 2, name: "tennis", st: false }, { id: 3, name: "swimming", st: true }];
15             $scope.ar2 = [2, 3];
16             $scope.exist = function (id) {
17                 for (var i = 0; i < $scope.ar2.length ; i++) {
18                     if ($scope.ar2[i] == id)
19                         return true;
20                 }
21                 return false;
22             }
23             $scope.show = function () {
24                 var rst = "";
25                 for (var i = 0; i < $scope.ar.length ; i++) {
26                     if ($scope.ar[i].st == true)
27                         rst += $scope.ar[i].name + ',';
28                 }
29                 alert(rst);
30             }
31         }
32     </script>
33 </head>
34 <body ng-app ng-controller="myCtr">
35     <ul>
36         <li ng-repeat="z in ar">
37             <input id="chk{{z.id}}" ng-checked="{{z.st}}" ng-model="z.st" type="checkbox" />
38             <label for="chk{{z.id}}">{{z.name}}</label>
39         </li>
40     </ul>
41     <hr />
42     <ul >
43         <li ng-repeat="z in ar">
44             <input id="chkk{{z.id}}" ng-checked="exist(z.id)" ng-model="z.st" type="checkbox" />
45             <label for="chkk{{z.id}}">{{z.name}}</label>
46         </li>
47     </ul>
48 
49     <input id="Button1" type="button" ng-click="show()" value="show" />
50    
51 </body>
52 </html>

孩提,我一连丢东西,然后还找不顶,每每抓狂大哭的当儿,你还见面特意淡定的面世,过一会儿即像是易魔术一样用出我委了找不着的事物,那个时候自己就想“我老爸好狠心”,原谅自己那时脑容量太小莫晓得语言为何物,单调直白地于您“找东西的食指”,后来,这个绰号一样于就是十几年,对之家中固定你为迷了十几年。说实话,你多较找东西如果强硬的大半,你是咱们家的能手,是我们家的掌勺大厨,同时还兼顾咱们家之技术人员,修电视电脑,安灯泡空调,各种电器都不在谈下,你勾勒一手潇洒好看的配,家长签署我总好找你签,喜欢学而写字虽然现在还是匪像,你让我跨,游泳,羽毛球,教我女孩子的防身术……

运转效果:

而生日及了,真想上慢数走,你和妈妈大年到直,我同你们并活动未来之行程。

今日咱们来持续增长上次的例子。我们来来来 稍微复杂点的使。

本,我都得以打理好团结之布满了,可要移不丢掉这样吃你,上磨回家发现而还要大多了白头发,妈妈被您染成地下的了,你说而莫能够老太快了,内心是休是猝不及防地发现女儿就这样可怜了,你平常勿是独好摆的总人口,可自上大学运动时若还要比较往年犹设念叨,一全方位又平等全方位的嘱咐,不厌其烦的点行李,每天都关切在千里之外那个我将要错过之都会,我懂得你舍不得我。

st代表入选与否 id代表复选项的value值 name代表复选项之text值
然后为此repeat一循环 是勿是如此  是休是应有这么:

于小到深,我都坐你为俊杰,你既是只军人,小时候我会动不动就翻来青春时若当兵的照,有同伴的时光总会告诉他们,“看,我大爸帅吧!”这么几年来,你一直都是因同样栽类似万能的像在正在,我尚未见了您哭,后来远离的眼前几乎夜间你哭了,我忽然就非常了,心脏像是给什么狠狠撞了一下,我莫知晓怎么安慰你,因为肯定要远离的,你喝了很多酒,回来我就是拉在你退跌撞撞地因在沙发上,我关非动你,你吧非叫自家关也无扣本身,就一个总人口坐于沙发上絮絮叨叨地游说,担心自身去矣止不放纵吃不惯,担心自己女孩子家家的吃亏,担心与同班处不好,担心自己害没人照料……我渐渐发现你哭了,但你硬说您莫哭,可哽咽的响声骗不了人数,那后我第一不善怀疑我的决定是未是蹭了,不该走至那多之地方上,我跑至厨房悄悄打电话让妈妈说怎么收拾,妈妈说“你大啊就是舍不得,你为大人烧点水喝醒酒,陪他说说话。”突然就以为心里酸酸的,说不清的难受,是什么,养了十九年的丫头一直尚未去了小来过远门,一直都是宁静乖乖的典范,所有人数都看我会留于省内,你们像为未曾想到我会这么执着的使失去远处上大学,可自我于填写志愿时独特之坚持,那时候你同一整个一律整个劝我,后来也仍尊重了自身之选取。上了高校后同室友聊男朋友,我便说“要找一个如我爸那样的,我父亲就是是模板”。

 1 app.filter('odditems', function () {
 2     return function (inputArray) {
 3         if (inputArray == true)
 4             return '是';
 5         else if (inputArray == false)
 6             return '否';
 7         else
 8             return '空';
 9     }
10 });

4连且javascript这个那个烂的东西 有只好处就是是 变量可以活的利用
无类型限制。比如可以擅自定义json格式的多少var person={name:”xiang”} 
定义了过后 可以连续以那个基础及补偿加内容 像这样 person.chk=true 。

 

且掌握在javascript里面 调用函数时 要将当下单击的控件对象传进
使用this ,angularjs 里面未均等 使用$event
。那么相应的功用函数又是安的吧

View Code

1 <ul>
2     <li ng-repeat="z in  curobj.favorsValue">
3         <input id="chkk{{z.id}}" ng-checked="z.Checked" value="{{z.id}}" name="favorchk" ng-model="z.Checked" type="checkbox" />
4         <label for="chkk{{z.id}}">{{z.name}}</label>
5     </li>
6 </ul>
 1 //全选
 2 $scope.selectAll = function (sender) {
 3     if ($(sender.target).is(':checked')) {
 4         for (var i = 0; i < $scope.data.length; i++) {
 5             $scope.data[i].chk = true;
 6         }
 7     }
 8     else {
 9         for (var i = 0; i < $scope.data.length; i++) {
10             $scope.data[i].chk = false;
11         }
12     }
13 }

表头部加个 全选功能的复选框

 1 <body ng-app="app">
 2     <div ng-controller="MainCtrl" class="container bg-color">
 3         <section>
 4             <pre>{{choseArr}}</pre>
 5             全选: <input type="checkbox" ng-model="master" ng-click="all(master,tesarry)">
 6             <div ng-repeat="z in tesarry">
 7                 <input id={{z}} type="checkbox" ng-model="x" ng-checked="master" ng-click="chk(z,x)">{{z}}
 8             </div>
 9             <a href="#" class="btn btn-danger" ng-click="delete()"> 删除</a>
10         </section>
11     </div>
12     <script>
13         var app = angular.module('app', []);
14         app.controller('MainCtrl', function ($scope, $http, $timeout) {
15             $scope.tesarry = ['1', '2', '3', '4', '5'];//初始化数据
16             $scope.choseArr = [];//定义数组用于存放前端显示
17             var str = "";//
18             var len = $scope.tesarry.length;//初始化数据長度
19             var flag = '';//是否点击了全选,是为a
20             $scope.x = false;//默认未选中
21 
22             $scope.all = function (c, v) {//全选
23                 if (c == true) {
24                     $scope.x = true;
25                     $scope.choseArr = angular.copy(v);
26                     flag = 'a';
27                 } else {
28                     $scope.x = false;
29                     $scope.choseArr = [];
30                     flag = 'b';
31                 }
32             };
33             $scope.chk = function (z, x) {//单选或者多选
34                 if (flag == 'a') {//在全选的基础上操作
35                     str = $scope.choseArr.join(',') + ',';
36                 }
37                 if (x == true) {//选中
38                     str = str + z + ',';
39                     flag = 'c'
40                     if ($scope.choseArr.length == len - 1) {
41                         $scope.master = true
42                     }
43                 } else {
44                     str = str.replace(z + ',', '');//取消选中
45                 }
46 
47                 $scope.choseArr = (str.substr(0, str.length - 1)).split(',');
48                 var dex = $scope.choseArr.indexOf("");//判断数组中有没有"",有的话返回值大于等于0,没有返回-1
49                 if (dex >= 0) {
50                     $scope.choseArr.splice(dex, 1);//删除数组中的"";
51                 };
52                 if ($scope.choseArr.length == 0) { $scope.master = false };
53             };
54             $scope.delete = function () {// 操作CURD
55                 if ($scope.choseArr[0] == "" || $scope.choseArr.length == 0) {//没有选择一个的时候提示
56                     alert("请至少选中一条数据在操作!")
57                     return;
58                 };
59                 for (var i = 0; i < $scope.choseArr.length; i++) {
60                     alert($scope.choseArr[i]);
61                     console.log($scope.choseArr[i]);//遍历选中的id
62                 }
63             };//delete end
64         });
65     </script>
66 
67 </body>
 1 //多选框绑定
 2             $scope.transFav = function () {
 3                 if ($scope.curobj.favorsValue != null && $scope.curobj.favorsValue != undefined)
 4                     return;
 5                 if ($scope.curobj.favors) {
 6 
 7                     var d = [{ id: "1", name: "basketball", Checked: false }, { id: "2", name: "tennis", Checked: false }, { id: "3", name: "swimming", Checked: false }];
 8                     var curlist = $scope.curobj.favors.split(",");
 9                     for (var i = 0; i < d.length; i++) {
10                         for (var j = 0; j < curlist.length; j++) {
11                             if (d[i].id == curlist[j]) {
12                                 d[i].Checked = true;
13                                 continue;
14                             }
15                         }
16                     }
17                     $scope.curobj.favorsValue = d;
18                 }
19                 else {
20                     var d = [{ id: "1", name: "basketball", Checked: false }, { id: "2", name: "tennis", Checked: false }, { id: "3", name: "swimming", Checked: false }];
21                     $scope.curobj.favorsValue = d;
22                 }
23             }

源码文件要因上平等首更改,直接生充斥及同首的源码即可。

3配段并不一定要逐完整对许 
框架会检查你服务端接收参数的数据模型类有怎么样字段
然后从返回的json数据里摸索 不称的字段 他未会见随便的 并且也不见面报错
只摸json数据里称的字段 然后序列化成 你c#数据模型类 
这点自己当框架处理的怪好 非常智能。比如上面都选 的效益
我哪怕让表格上绑的多寡差不多加了同一排 列名为chk 类型为bool 为true 则当选 
没有此字段 或者也false 都也没有选中,

1 <th>
2                                 <input id="Checkbox1" ng-click="selectAll($event)" type="checkbox" />全选
3                                 
4                             </th>

招来了下没找到格式化布尔值的不二法门。还自己写了个filter:

然的多寡  。然后前端得到的自发性就是这种格式的数量了
操作后还要和后端做到无缝对接。想法是好之总会碰到各种题材
这种性质逻辑代码必须写于相应的数据模型代码里 给linq查询带来了限定。
如果应用匿名类的办法做linq查询而调用不了是逻辑
匿名类是调整用无了逻辑代码的 只会做简单的初始化属性的工作
。为了以匿名类里调用方法本身还找疯了 结果还是没有找到,最后还是妥协了
把这工作放到客户端去处理。

第一我们来加以一个全选 的职能。

最为广泛的那种就算是喜  你生神马爱好 打篮球 羽毛球 游泳 ,哇哈哈 ,
别打自己。这是一个基本上针对性大多之涉 可能会见想到专门构一个表来存储这些东西
,用不着啦 。直接加个文本字段 为逗号隔开就是可了。

可当劳务端属性我们要当着这么一个性能 public List<CheckboxItem>
favorsValue{ get; set; }
让客户端转移数据后回传可以完成无缝对接。客户端数据绑定:

2为您传至客户端的json数据 又会无缝的散播来。
在以匿名类linq方式查询的时段
如果您想从客户端自动序列化成你C#数据模型类的属于性
那么您便拿匿名查询时的字段名称写成一样。

1 <td>
2     <input ng-checked="{{stu.chk}}" ng-model="stu.chk" type="checkbox" /></td>

新兴证实完全是自多虑了 ,原来angularjs的达式 也支持三冠运算
:{{stu.isChecked==true?’yes’:”}}
联网下继续壮大上面的例证 来加以个复选项之意义

按部就班我们来三种植不同的爱好 那么将于数据库里还出来
,然后根据各条数据各自不同的坐逗号隔开的字符 转换成

齐一样篇的例证里我们看出 分页时载入的是咱透过linq 查询从定义列
然后构建的匿名类 。使用这种EF框架+linq 查询的方 我看无便民的一些就算是
要无你就算只能select 一个固定对应表的数据模型类名
,但是序列化成json的时刻对外键类引用有先天性之bug 
,就是框架自动序列化成json格式时见面发循环引用错误
。序列化类型也XX的靶子时检测到循环引用。没道
我们能召开的即使是遮某些属性
。方式就是是在字段属性上加上[AjaxPro.AjaxNonSerializable] 光这样还不行
如果 字段属性 有 virtual 关键字 还见面报错,但是EF写数据模型代码的时节
外键属性如果无加以virtual 修饰 就当废的
外键抓匪恢复的。真是让人蛋疼的题材。大多数状态咱询问都未会见只询问单一表的数据
并且基本要用匿名类的道 想用什么字段用啊字段
外键也可以立刻查询出来 。综合上面的问题 还是用匿名类的方法 。

咱举行这个作用正是以了上述原理。

连下去我们来说下有些常用之多少格式化方式。angularjs里面由带了有些自带的filter
可提供格式化日期 这些 {{ stu.createDate | date: ‘yyyy年MM月dd’ }}

View Code

 如果您愿意客户端传回来的数额对象 自动序列化成你的C#数据模型类
。也略微需要注意的地方 除了面我说的 ,还有:
1未能够因此Ilist 直接用List 数组没试了 好像也不行 。

澳门葡京手机网址 3澳门葡京手机网址 4

自己吗不思多说 ,又给变量又加以这么那样处理的 。麻烦
复杂。我还免设直接用jquery呢。angularjs一直的理念就是是 只关注数据模型。
其实您待之是这么同样栽格式的事物:

客户端转移favorsValue的情节服务端可获知
然后再行组织改为逗号隔开的字符串。当然这工作你当客户端做也是可的:

 1 //根据name 获得所有checkbox选取的的值
 2 function addMem(names) {
 3     var allNames = "";
 4     $("input[name='" + names + "']").each(function () {
 5         if ($(this).attr("checked") == "checked") {
 6             if (allNames == "") {
 7                 allNames = $(this).attr("value");
 8             } else {
 9                 allNames += "," + $(this).attr("value");
10             }
11         }
12     });
13     //alert(allNames);
14     return allNames;
15 }

$scope.ar = [{ id: 1, name: “basketball”, st: true }, { id: 2, name:
“tennis”, st: false }, { id: 3, name: “swimming”, st: true }];

$scope.ar = [{ id: 1, name: “basketball”, st: true }, { id: 2, name:
“tennis”, st: false }, { id: 3, name: “swimming”, st: true }];

 1 public List<CheckboxItem> favorsValue
 2 {
 3     get
 4     {
 5         if(_favorsValue!=null)
 6             return _favorsValue;
 7         else if (string.IsNullOrEmpty(favors)==false)
 8         {
 9             Dal d = new Dal();
10             List<CheckboxItem> flist = d.GetAllFavors();
11             string[] curlist = favors.Split(',');
12             for (int i = 0; i < flist.Count; i++)
13             {
14                 for (int j = 0; j < curlist.Length; j++)
15                 {
16                     if (flist[i].id == curlist[j])
17                     {
18                         flist[i].Checked = true;
19                         continue;
20                     }
21                 }
22             }
23             return flist;
24             //return favors.Split(',');
25         }
26         else
27         {
28             Dal d = new Dal();
29             List<CheckboxItem> flist = d.GetAllFavors();
30             return flist;
31         }
32     }
33     set {
34         _favorsValue = value;
35     }
36    
37 }

下一场又履行循环中 弄个复选框的双向绑定就好了

澳门葡京手机网址 5

看 就足以了 虽然咱回传的数码差不多矣个chk属性
但是仍然能够给成功解析成StudentsInfo对象。angularjs里面特别注重数据操作以及界面上的呼应关系
 让您的顺序更加面向对象化。