WebService和AngularJS实现模糊过滤查询

【概要】

网上看到一个不错的帖子,用WebService获取json,然后在前端使用AngularJs进行过滤搜索,看完文章后,按自己的想法,写了一个demo,给大家讨论参考,本人技术一般,还望大家多加指点。

【术语】

WebService:是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序

AngularJS:通过为开发者呈现一个更高层次的抽象来简化应用的开发。如同其他的抽象技术一样,这也会损失一部分灵活性。换句话说,并不是所有的应用都适合用AngularJS来做。AngularJS主要考虑的是构建CRUD应用。幸运的是,至少90%的WEB应用都是CRUD应用。但是要了解什么适合用AngularJS构建,就得了解什么不适合用AngularJS构建。

【完成效果】

例子执行成功后,默认是显示所有用户的列表,如图:

当在搜索框中输入“王”后,进行过滤,如图:

下面一步一步的讲下这个例子的完成。

一、创建数据库

我在这里用的是sqlite,大家可以按自己的擅长和方便选择数据库,表结构如图:

二、创建项目

在vs2010中新建一个web应用程序,然后添加Default.aspx、angular.min.js、WebService.asmx、BLL层,如图:

三、编写BLL层

BLL层主要完成数据库的读取和提供json的功能,这里例子小,读取数据库的方法直接在BLL层中实现,代码如下:


 1     public class ExampleBLL
2 {
3 /// <summary>
4 /// 获取datatable
5 /// </summary>
6 /// <returns> datatable</returns>
7 public DataTable GetDataTable()
8 {
9 DataTable dataTable = new DataTable();
10 using (SQLiteConnection conn = new SQLiteConnection(@"Data Source =" + HttpContext.Current.Server.MapPath("~/example.db" ) + ";"))
11 {
12 SQLiteCommand cmd = conn.CreateCommand();
13 cmd.CommandText = "select * from users";
14 cmd.CommandType = CommandType.Text;
15
16 if (conn.State != ConnectionState .Open)
17 {
18 conn.Open();
19 }
20 SQLiteDataReader dr = cmd.ExecuteReader(CommandBehavior .CloseConnection);
21 dataTable.Load(dr);
22 }
23 return dataTable;
24 }
25
26 /// <summary>
27 /// 根据DataTable生成Json
28 /// </summary>
29 /// <param name="table"> datatable</param>
30 /// <returns> json</returns>
31 public string DataTableToJson(DataTable table)
32 {
33 if (table == null || table.Rows.Count == 0)
34 {
35 return string .Empty;
36 }
37
38 var sb = new StringBuilder();
39 sb.Append( "[");
40
41 string[] columnName = new string[table.Columns.Count];//列名数组
42 for (int i = 0; i < table.Columns.Count; i++)
43 {
44 columnName[i] = table.Columns[i].ColumnName.ToLower();//列名小写
45 }
46 //拼接列
47 for (int i = 0; i < table.Rows.Count; i++)
48 {
49 sb.Append( "{");
50 for (int j = 0; j < columnName.Length; j++)
51 {
52 sb.Append( "\"" + columnName[j] + "\":\"" + table.Rows[i][j].ToString() + "\"" );
53 if (j < columnName.Length - 1)
54 {
55 sb.Append( ",");
56 }
57 }
58 sb.Append( "}");
59 if (i < table.Rows.Count - 1)
60 {
61 sb.Append( ",");
62 }
63 }
64 sb.Append( "]");
65
66 table = null;
67 return sb.ToString();
68 }
69 }

四、编写WebService

这里编写一个GetUsersJson()方法,用于提供json数据,代码如下:


 1     /// <summary>
2 /// WebService 的摘要说明
3 /// </summary>
4 [ WebService(Namespace = "http://tempuri.org/" )]
5 [ WebServiceBinding(ConformsTo = WsiProfiles .BasicProfile1_1)]
6 [System.ComponentModel. ToolboxItem(false )]
7 [System.Web.Script.Services.ScriptService]
8 public class WebService : System.Web.Services. WebService
9 {
10 [ WebMethod]
11 [ ScriptMethod(UseHttpGet = true , ResponseFormat = ResponseFormat.Json)]
12 public void GetUsersJson()
13 {
14 ExampleBLL BLL = new ExampleBLL();
15 JavaScriptSerializer js = new JavaScriptSerializer();
16 Context.Response.Clear();
17 Context.Response.ContentType = "application/json";
18 UserData data = new UserData();
19 data.Message = BLL.DataTableToJson(BLL.GetDataTable());
20 Context.Response.Write(js.Serialize(data.Message));
21 }
22
23 public class UserData
24 {
25 public string Message { get; set; }
26 }
27 }

这里要在web.config中system.web节点中添加WebService协议如点,代码如下:

1     < webServices>
2 < protocols>
3 < add name ="HttpGet "/>
4 < add name ="HttpPost "/>
5 </ protocols>
6 </ webServices>

五、访问WebService

这时访问WebService下的GetUsersJson(),得到如图:

六、编写html

在html中引用AngularJS,AngularJS的具体操作可以搜索官方文档,html代码如下:


 1 <html ng-app="serviceConsumer">
2 <head>
3 <title> web service</title >
4 <style type="text/css">
5 #tableResult
6 {
7 width: 500px ;
8 margin-top: 15px ;
9 border-top: 1px solid #3d3d3d;
10 border-left: 1px solid #3d3d3d;
11 }
12 #tableResult td
13 {
14 border-right: 1px solid #3d3d3d;
15 border-bottom: 1px solid #3d3d3d;
16 }
17 </style>
18 <script type="text/javascript" src="scripts/angular.min.js"></script>
19 </head>
20 <body>
21 <form id="form1" runat="server">
22 <div>
23 <div ng-controller="usersController">
24 搜索: <input type="text" ng-model="search" />
25 <table id="tableResult" cellspacing="0" cellpadding="3">
26 <thead>
27 <tr style="background-color : #eee;">
28 <td>
29 序号
30 </td>
31 <td>
32 姓名
33 </td>
34 </tr>
35 </thead>
36 <tr ng-repeat="i in users | filter:search">
37 <td style="width : 40px;">
38 {{i.id}}
39 </td>
40 <td>
41 {{i.name }}
42 </td>
43 </tr>
44 </table>
45 </div>
46 <br />
47 </div>
48 <script type="text/javascript">
49 var app = angular.module(‘serviceConsumer‘ , []);
50
51 app.controller( ‘usersController‘, function ($scope, $http) {
52 var url = "Asmx/WebService.asmx/GetUsersJson" ;
53 $http.get(url).success( function (data) {
54 var myjson = JSON.parse(data);
55 $scope.users = JSON.parse(myjson);
56 })
57 })
58 </script>
59 </form>
60 </body>
61 </html>

七、完成效果

执行完成后,输入关键字就可以过滤结果,如图:

八、参考

出处:http://www.codeproject.com/Articles/777284/Consuming-JSON-ASMX-Web-Services-with-AngularJS-A

WebService和AngularJS实现模糊过滤查询,布布扣,bubuko.com

时间: 2024-12-09 02:47:11

WebService和AngularJS实现模糊过滤查询的相关文章

在Winform界面中使用DevExpress的TreeList实现节点过滤查询的两种方式

在我较早的一篇随笔<在DevExpress程序中使用TeeList控件以及节点查询的处理>中,介绍了在树形列表TreeList控件上面,利用SearchControl实现节点的模糊查询过滤操作,效果还是非常不错的,TreeList功能比较强大,界面也相对比微软内置的Winform的TreeView控件美观不少.后来在一次偶然过程中,发现TreeList控件本身就可以打开头部过滤输入,实现节点的快速过滤,不过过滤是完全匹配方式,和我们常规的模糊匹配思路不一样,本篇随笔介绍对TreeList控件常

Solr实现 并集式、多值、复杂 过滤查询的权限【转】

公司开发使用的搜索引擎核心是Solr,但是应为业务原因,需要相对复杂权限机制. 1)通过Solr的filterQuery可以实现field过滤,实现过滤项的效果.索引A{filter1:a,field2:a,field3:a,field4:1}B{filter1:b,field2:b,field3:b,field4:2}C{filter1:c,field2:c,field3:c,field4:3}过滤条件fq=field:b结果B{filter1:b,field2:b,field3:b,fiel

Excel 中使用SQL 语句查询数据(七)-----用LIKE 运算符进行模糊匹配查询

这篇博文要和大家分享的是用LIKE 运算符进行模糊匹配查询下图数据源商品代号包含数字的数据. 我们用Microsoft query连接数据源,步骤请参考本系列第一篇博文.语句如下图 其中 LIKE '%[0-9]%' 执行结果如下 然后将结果导入excel  的sheet中

css3简单实现图片模糊过滤效果

<!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"> <head>     <meta http-equiv="Cont

[Elasticsearch] 过滤查询以及聚合(Filtering Queries and Aggregations)

本章翻译自Elasticsearch官方指南的Filtering Queries and Aggregations一章. 过滤查询以及聚合 A natural extension to aggregation scoping is filtering. Because the aggregation operates in the context of the query scope, any filter applied to the query will also apply to the

mysql模糊匹配查询like,regexp,in

mysql模糊匹配查询like,regexp,in 摘要 内容比较简单,无摘要. 关键词 模糊查询  like  regexp  in  contact 正文 下图是示例用到的数据表信息 MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi.grep和sed的扩展正则表达式模式匹配的格式 一.SQL模式 SQL的模式匹配允许你使用"_"匹配任何单个字符,而"%"匹配任意数目字符(包括零个字符).在 MySQL中,SQL的模式缺省是忽略大小写的.

每天一点数据库之-----Day 5 过滤查询

每天一点数据库之-----Day 5 过滤查询 ----转载请注明出处:coder-pig 本节引言: 上一节我们学习了基本的数据检索,这节我们来学习高级一点的 过滤查询~ 1.单字符过滤: 就是使用"_"这个下划线来替代一个字符,比如,我们想检索出: door,book,cool,took这类字符串的话,我们可以使用"_oo_" 比如我们使用下述SQL语句: SELECT * FROM T_Worker WHERE FName LIKE '_a_y' 运行后: 如

使用函数创建一个过滤查询

使用类:public class FunctionRangeQParserPlugin extends QParserPlugin 通过函数创建一个范围查询: 其他参数: l, 下限范围,可选) u, 上限范围,可选) incl, 包含下限:true/false,可选,默认为true incu, 包含上限:true/false,可选,默认为true例子: {!frange l=1000 u=50000}myfield 过滤查询例子:: fq={!frange l=0 u=2.2}sum(user

在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询

前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是值得分析的. 所以我们一般会在每张表中加一个"是否删除IsDeleted"或者"是否有效IsValid"的字段,来标识这条数据的状态是否可用! 那么疑问来了,在写SQL或者Linq的时候我们到底是要加上这个条件还是忽略这个条件呢?答案当然是根据实际业务需求和情况来决定.