<!DOCTYPE html><html><head> <meta charset="utf-8"> </head>
<body> <div ng-app="myApp" ng-controller="myctrl"> <table width=‘100%‘ border="1" cellspacing="0"> <tr> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>操作</th> </tr> <tr ng-repeat="x in list"> <td ng-bind=" x.username"></td> <td ng-bind=" x.userage"></td> <td ng-bind=" x.usersex"></td> <td><input type="button" value="删除" uid={{x.userid}} ng-click="del($event)"><input type="button" value="修改" uid={{x.userid}}></td> //uid是自己定的属性 并赋值 del(传自己为对象进去) 相当于js 的this </tr> </table> </div> </body> <script src="js/angular.min.js" charset="utf-8"></script> <script type="text/javascript"> var app=angular.module(‘myApp‘,[]); app.controller(‘myctrl‘,function($scope,$http){ $http({ method:‘GET‘, url:"php/angu_test_sel.php" }).then(function successCallback(response){ $scope.list=response.data.msg; },function errorCallback(response){ alert("数据请求失败"); });
$scope.del=function(event){ var id=event.target.getAttribute("uid");//获取当前对象的uid值
$http({ method:‘GET‘, params :{ id : id},//第一个id是后台php接受的参数名称 第二个id是本页面获取的删除的id值 url:"php/angu_test_del.php" }).then(function successCallback(response){ window.location.reload(); },function errorCallback(response){ alert("删除失败"); }); } }) </script>
<?phpheader(‘Content-Type: text/html; charset=utf8‘); $conn=mysql_connect("localhost","root","root"); mysql_query("use txt"); if($conn){ if($_GET){ $uid=$_GET["id"]; $sql="delete from test1 where userid=$uid"; $res=mysql_query($sql); if($res>0){ echo ‘{"status":"1"}‘; }else{ echo ‘{"status":"0"}‘; } } }else{ echo ‘{"status":"-2"}‘; } ?>
<?phpheader(‘Content-Type: text/html; charset=utf8‘); $conn=mysql_connect("localhost","root","root"); mysql_query("use txt"); if($conn){ $sql="select * from test1"; $res=mysql_query($sql); if(mysql_num_rows($res)>0){ while($row=mysql_fetch_assoc($res)){ $arr[]= $row; } echo ‘{"status":"1","msg":‘.json_encode($arr).‘}‘; } }else{ echo ‘{"status":"-2";"msg":"fail to connect"}‘; } ?>
angularjs连接数据库查找删除操作
标签:oct back sel fetch div roo getattr 第一个 query
小编还为您整理了以下内容,可能对您也有帮助:
angularjs是一个前端框架,为什么要有sql语句操作数据库那?
一、angularjs是一个javascript框架。通过script脚本引入,他是一个用Javascript编写的库。angularjs通过指令扩展了HTML,通过表达式绑定数据到HTML中。AngularJS主要考虑的是构建CRUD(增删改查)应用。
优点:
1. 模板功能强大丰富,并且是声明式的,自带了丰富的Angular指令;
2. 是一个比较完善的前端MVC框架,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能;
3. 自定义Directive(指令),比jQuery插件还灵活,但是需要深入了解Directive的一些特性,简单的封装容易,复杂一点官方没有提供详细的介绍文档,可以通过阅读源代码来找到某些我们需要的东西,如:在directive使用 $parse;
4. ng模块化比较大胆的引入了Java的一些东西(依赖注入),能够很容易的写出可复用的代码,对于敏捷开发的团队来说非常有帮助。
缺点:
1. 验证功能错误信息显示比较薄弱,需要写很多模板标签,没有jQuery Validate方便,所以可以自己封装了验证的错误信息提示;
2. ngView只能有一个,不能嵌套多个视图,虽然有angular-ui/ui-router · GitHub 解决,但是貌似ui-router 对于URL的控制不是很灵活,必须是嵌套式的;
3. 对于特别复杂的应用场景,貌似性能有点问题,特别是在Windows下使用chrome浏览器,不知道是内存泄漏了还是什么其他问题,没有找到好的解决方案,奇怪的是在IE10下反而很快;
4. 这次从1.0.X升级到1.2.X,貌似有比较大的调整,没有完美兼容低版本,升级之后可能会导致一个兼容性的BUG,具体详细信息参考官方文档AngularJS ,对应的中文版本:Angular 1.0到1.2 迁移指南
5. ng提倡在控制器里面不要有操作DOM的代码,对于一些jQuery 插件的使用,如果想不破坏代码的整洁性,需要写一些directive去封装插件,但是现在有很多插件的版本已经支持Angular了,如:jQuery File Upload Demo
6. Angular 太笨重了,没有让用户选择一个轻量级的版本,当然1.2.X后,Angular也在做一些更改,比如把route,animate等模块出去,让用户自己去选择。追问那它为什么要写入sql语句列?为什么要有双向传值哪?就是当初在创建时为什么要加入这俩样哪?
angularjs怎么从数据库获取数据
function ctrl($http,$scope){
var url = '../login/save.html',
transFn=function(obj) {
var str = [];
for(var p in obj){
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&").toString();
};
$scope.login = function(user){
var data=transFn(user);
$http.post(url+"?"+data).success(function(data, status, headers, config){
if (data.success){
}else{
}
}).error(function(data, status, headers, config){
alert("error");
});
};
}
如何使用mvc实现webapi的增删改查
1.创建项目:visual C# —> ASP.NET MVC 4 web应用程序 模板—>web api;
2.注册路由:
路由表中的每一个条目都包含一个路由模板。这个Web API默认的路由模版是"api/{controller}/{id}"。在这个模版中,“api”是一个文字式路径片段,而{controller}和{id}则是占位符变量。
当Web API框架接收一个HTTP请求时,它会试图根据路由表中的一个路由模板来匹配其URI。如果无路由匹配,客户端会接收到一个404(未找到)错误。
3.linq to sql连接数据库
1.建立数据库建表
2.在models文件夹里面新建linq to sql类文件
3.工具->连接到数据库
4.将要用的表拖入设计区
5.获取数据库Getway。"linq to sql class"文件名+Datacontext实例化这个对象,数据表就会映射到一个集合属性中,personDataDataContext db = new personDataDataContext();
6.增删改查
增:
public Boolean Post([FromBody]UserInfo userInfo) {
personDataDataContext db = new personDataDataContext();
var s1 = new test2
{
UserName =userInfo.UserName, Id=userInfo.Id, Age=userInfo.Age
};
if (db.test2.SingleOrDefault<test2>(s => s.Id == userInfo.Id) == null)
{
db.test2.InsertOnSubmit(s1);
db.SubmitChanges();
return true;
} else {
return false;
}
}
删:
public bool Delete(int id)
{
personDataDataContext db = new personDataDataContext();
var deleteperson = db.test2.SingleOrDefault<test2>(s => s.Id == id);
if (deleteperson == null)
{
return false;
} else {
db.test2.DeleteOnSubmit(deleteperson);
db.SubmitChanges();
return true;
}
}
改:
public Boolean Put(int id, [FromBody]UserInfo userInfo)
{
personDataDataContext db = new personDataDataContext();
var editperson = db.test2.SingleOrDefault<test2>(s => s.Id == userInfo.Id);
if (editperson == null)
{
return false;
} else {
editperson.Age = userInfo.Age;
editperson.UserName = userInfo.UserName;
db.SubmitChanges();
return true;
}
查:
public IEnumerable<test2> Get()
{
personDataDataContext db = new personDataDataContext();
var query = from s in db.test2
orderby s.UserName
select s;
return query;
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
这里我新建了一个userinfo类
public class UserInfo { public string UserName { get; set; } public int Id { get; set; } public int Age { get; set; } }
用来接收前端页面ajax请求中的data数据,s => s.Id == userInfo.Id是lamda表达式创建委托方法意思是在db.test2的person集合中查找某个person的Id与userinfo接收到的id相等的person对象
如何使用AngularJs打造权限管理系统【简易型】_AngularJS
一、引言
本文将介绍如何把AngularJs应用到实际项目中。本篇文章将使用AngularJS来打造一个简易的权限管理系统。下面不多说,直接进入主题。
二、整体架构设计介绍
首先看下整个项目的架构设计图:
从上图可以看出整个项目的一个整体结构,接下来,我来详细介绍了项目的整体架构:
采用Asp.net Web API来实现REST 服务。这样的实现方式,已达到后端服务的公用、分别部署和更好地扩展。Web层依赖应用服务接口,并且使用Castle Windsor实现依赖注入。
显示层(用户UI)
显示层采用了AngularJS来实现的SPA页面。所有的页面数据都是异步加载和局部刷新,这样的实现将会有更好的用户体验。
应用层(Application Service)
AngularJS通过Http服务去请求Web API来获得数据,而Web API的实现则是调用应用层来请求数据。
基础架构层
基础架构层包括仓储的实现和一些公用方法的实现。
仓储层的实现采用EF Code First的方式来实现的,并使用EF Migration的方式来创建数据库和更新数据库。
LH.Common层实现了一些公用的方法,如日志帮助类、表达式树扩展等类的实现。
领域层
领域层主要实现了该项目的所有领域模型,其中包括领域模型的实现和仓储接口的定义。
介绍完整体结构外,接下来将分别介绍该项目的后端服务实现和Web前端的实现。
三、后端服务实现
后端服务主要采用Asp.net Web API来实现后端服务,并且采用Castle Windsor来完成依赖注入。
这里拿权限管理中的用户管理来介绍Rest Web API服务的实现。
提供用户数据的REST服务的实现:
从上面代码实现可以看出,User REST 服务依赖与IUserService接口,并且也没有像传统的方式将所有的业务逻辑放在Web API实现中,而是将具体的一些业务实现封装到对应的应用层中,Rest API只负责调用对应的应用层中的服务。这样设计好处有:
REST 服务部依赖与应用层接口,使得职责分离,将应用层服务的实例化交给单独的依赖注入容器去完成,而REST服务只负责调用对应应用服务的方法来获取数据。采用依赖接口而不依赖与具体类的实现,使得类与类之间低耦合。REST服务内不包括具体的业务逻辑实现。这样的设计可以使得服务更好地分离,如果你后期想用WCF来实现REST服务的,这样就不需要重复在WCF的REST服务类中重复写一篇Web API中的逻辑了,这时候完全可以调用应用服务的接口方法来实现WCF REST服务。所以将业务逻辑实现抽到应用服务层去实现,这样的设计将使得REST 服务职责更加单一,REST服务实现更容易扩展。
用户应用服务的实现:
这里应用服务层其实还可以进一步的优化,实现代码层级的读写分离,定义IReadOnlyService接口和IWriteServie接口,并且把写操作可以采用泛型方法的方式抽象到BaseService中去实现。这样一些增删改操作实现公用,之所以可以将这里操作实现公用,是因为这些操作都是非常类似的,无非是操作的实体不一样罢了。其实这样的实现在我另一个开源项目中已经用到:OnlineStore.大家可以参考这个自行去实现。
仓储层的实现:
用户应用服务也没有直接依赖与具体的仓储类,同样也是依赖其接口。对应的用户仓储类的实现如下:
四、AngularJS前端实现
Web前端的实现就是采用AngularJS来实现,并且采用模块化开发模式。具体Web前端的代码结构如下图所示:
使用AngularJS开发的Web应用程序的代码之间的调用层次和后端基本一致,也是视图页面——》控制器模块——》服务模块——》Web API服务。
并且Web前端CSS和JS资源的加载采用了Bundle的方式来减少请求资源的次数,从而加快页面加载时间。具体Bundle类的配置:
首页 Index.cshtml
五、运行效果
介绍完前后端的实现之后,接下来让我们看下整个项目的运行效果:
六、总结
到此,本文的所有内容都介绍完了,尽管本文的AngularJS的应用项目还有很多完善的地方,例如没有缓冲的支持、没有实现读写分离,没有对一些API进行压力测试等。但AngularJS在实际项目中的应用基本是这样的,大家如果在项目中有需要用到AngularJS,正好你们公司的后台又是.NET的话,相信本文的分享可以是一个很好的参考。另外,关于架构的设计也可以参考我的另一个开源项目:OnlineStore和FastWorks。