写在前面
文章,关于anguar的位置也没有一个比较好的一个标准。这里也是抛砖引玉,希望通过讨论,得到一个更好的结构。
项目结构
文件作为模板文件,这里将应用的js,及css文件,都凡在该页。如图所示:
文件夹:存放webapi接口。
文件夹,这样做,也是为了操作方便(文件多的话,来回的切换窗口,确实很麻烦)。
文件,以及app.js
包括module的注册,以及服务信息:
app = angular.module('app_store',['ngRoute','StoreService'<span style="color: #008000;">//<span style="color: #008000;">服务
<span style="color: #0000ff;">var StoreService = angular.module('StoreService'<span style="color: #000000;">,[]);
<span style="color: #008000;">//<span style="color: #008000;">请求服务
StoreService.factory('requestService',<span style="color: #0000ff;">function<span style="color: #000000;"> ($http,$q) {
<span style="color: #0000ff;">var request =<span style="color: #000000;"> {
method: 'POST'<span style="color: #000000;">,url: ''<span style="color: #000000;">,headers: { 'Content-Type': 'application/json'<span style="color: #000000;"> },data: {}
};
<span style="color: #0000ff;">var postData =<span style="color: #000000;"> {
lists: <span style="color: #0000ff;">function<span style="color: #000000;"> (type) {
request.method = "get"<span style="color: #000000;">;
request.url = "../api/order/lists/" + type + ""<span style="color: #000000;">;
<span style="color: #0000ff;">return<span style="color: #000000;"> requestService($http,$q,request);
},submit_product: <span style="color: #0000ff;">function<span style="color: #000000;"> (data) {
request.method = "post"<span style="color: #000000;">;
request.url = "../api/order"<span style="color: #000000;">;
request.data =<span style="color: #000000;"> data;
<span style="color: #0000ff;">return<span style="color: #000000;"> requestService($http,request);
}
};
<span style="color: #0000ff;">return<span style="color: #000000;"> postData;
});
<span style="color: #0000ff;">function<span style="color: #000000;"> requestService($http,request) {
<span style="color: #0000ff;">var deferred = $q.defer(); <span style="color: #008000;">//<span style="color: #008000;"> 声明延后执行,表示要去监控后面的执行
<span style="color: #000000;"> $http(request).
success(<span style="color: #0000ff;">function<span style="color: #000000;"> (data,status,headers,config) {
deferred.resolve(data); <span style="color: #008000;">//<span style="color: #008000;"> 声明执行成功,即http请求数据成功,可以返回数据了
<span style="color: #000000;"> }).
error(<span style="color: #0000ff;">function<span style="color: #000000;"> (data,config) {
<span style="color: #0000ff;">var StoreService = angular.module('StoreService'<span style="color: #000000;">,[]);
<span style="color: #008000;">//<span style="color: #008000;">请求服务
StoreService.factory('requestService',<span style="color: #0000ff;">function<span style="color: #000000;"> ($http,$q) {
<span style="color: #0000ff;">var request =<span style="color: #000000;"> {
method: 'POST'<span style="color: #000000;">,url: ''<span style="color: #000000;">,headers: { 'Content-Type': 'application/json'<span style="color: #000000;"> },data: {}
};
<span style="color: #0000ff;">var postData =<span style="color: #000000;"> {
lists: <span style="color: #0000ff;">function<span style="color: #000000;"> (type) {
request.method = "get"<span style="color: #000000;">;
request.url = "../api/order/lists/" + type + ""<span style="color: #000000;">;
<span style="color: #0000ff;">return<span style="color: #000000;"> requestService($http,$q,request);
},submit_product: <span style="color: #0000ff;">function<span style="color: #000000;"> (data) {
request.method = "post"<span style="color: #000000;">;
request.url = "../api/order"<span style="color: #000000;">;
request.data =<span style="color: #000000;"> data;
<span style="color: #0000ff;">return<span style="color: #000000;"> requestService($http,request);
}
};
<span style="color: #0000ff;">return<span style="color: #000000;"> postData;
});
<span style="color: #0000ff;">function<span style="color: #000000;"> requestService($http,request) {
<span style="color: #0000ff;">var deferred = $q.defer(); <span style="color: #008000;">//<span style="color: #008000;"> 声明延后执行,表示要去监控后面的执行
<span style="color: #000000;"> $http(request).
success(<span style="color: #0000ff;">function<span style="color: #000000;"> (data,status,headers,config) {
deferred.resolve(data); <span style="color: #008000;">//<span style="color: #008000;"> 声明执行成功,即http请求数据成功,可以返回数据了
<span style="color: #000000;"> }).
error(<span style="color: #0000ff;">function<span style="color: #000000;"> (data,config) {
deferred.reject(data); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 声明执行失败,即服务器返回<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a> </span>
<span style="color: #000000;"> });
<span style="color: #0000ff;">return deferred.promise; <span style="color: #008000;">//<span style="color: #008000;"> 返回承诺,这里并不是最终数据,而是访问最终数据的API
};
文件中,其中也包括请求的服务,考虑到减少一次静态文件的请求,所以将服务也放在了该文件中。
功能不是太多,还是放在一个里面,如果定义太多的js文件,一是静态文件的请求次数会很多,二是开发起来确实很头大,每次开发在vs打开n个tab页面,你会发现会让你非常的头大。
自定义的过滤器,(如果过滤器不多,建议还是合并到app.js文件中。)
名称建文件夹。如果视图不多,我是一股脑的都塞到views文件夹了。
一个例子
搜索商品的列表的例子。
app.controller('StoreController','StoreController' (!= "飞机" (data._code === 200=
app.config(['$routeProvider','/',{ templateUrl: '../Scripts/Views/OrderList.html',controller: 'StoreController''/error',{ templateUrl: '../Scripts/Views/Error.html',controller: 'ErrorController''/error'
搜索商品"
Box"
<
{{item.Name}}
单价:{{item.Price}}
<span style="color: #0000ff;"></
<span style="color: #800000;">div<span style="color: #0000ff;">>添加视图,作为呈现的页面。
<span style="color: #0000ff;">namespace<span style="color: #000000;"> Wolfy.MvsSinglePage.Controllers
{
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> StoreController : Controller
{
<span style="color: #008000;">//<span style="color: #008000;"> GET: Store
<span style="color: #0000ff;">public<span style="color: #000000;"> ActionResult Index()
{
<span style="color: #0000ff;">return<span style="color: #000000;"> View();
}
}
}
{
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> StoreController : Controller
{
<span style="color: #008000;">//<span style="color: #008000;"> GET: Store
<span style="color: #0000ff;">public<span style="color: #000000;"> ActionResult Index()
{
<span style="color: #0000ff;">return<span style="color: #000000;"> View();
}
}
}
添加指定ng-view的div,用来呈现Views中的html模板的。
<span style="color: #0000ff;"><<span style="color: #800000;">div <span style="color: #ff0000;">ng-view<span style="color: #0000ff;">></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;">namespace<span style="color: #000000;"> Wolfy.MvsSinglePage.Controllers.api
{
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> OrderController : ApiController
{
<span style="color: #008000;">//<span style="color: #008000;"> GET: api/Order
<span style="color: #000000;"> [HttpGet]
[Route(<span style="color: #800000;">"<span style="color: #800000;">api/order/lists/{key?}<span style="color: #800000;">"<span style="color: #000000;">)]
<span style="color: #0000ff;">public <span style="color: #0000ff;">async Task Get(<span style="color: #0000ff;">string <span style="color: #000000;"> key)
{
<span style="color: #0000ff;">return <span style="color: #0000ff;">await Task.Run(() =><span style="color: #000000;">
{
HttpResponseMessage response = <span style="color: #0000ff;">new<span style="color: #000000;"> HttpResponseMessage(HttpStatusCode.Accepted);
List lst = <span style="color: #0000ff;">new List<span style="color: #000000;">() {
<span style="color: #0000ff;">new Order(){ Id=Guid.NewGuid(),Dt=DateTime.Now,Name=<span style="color: #800000;">"<span style="color: #800000;">飞机<span style="color: #800000;">",Price=<span style="color: #800080;">2222222<span style="color: #000000;">},<span style="color: #0000ff;">new Order(){ Id=Guid.NewGuid(),Name=<span style="color: #800000;">"<span style="color: #800000;">飞机2<span style="color: #800000;">",Name=<span style="color: #800000;">"<span style="color: #800000;">飞机3<span style="color: #800000;">",Name=<span style="color: #800000;">"<span style="color: #800000;">飞机4<span style="color: #800000;">",Name=<span style="color: #800000;">"<span style="color: #800000;">飞机5<span style="color: #800000;">",Name=<span style="color: #800000;">"<span style="color: #800000;">飞机6<span style="color: #800000;">",};
<span style="color: #0000ff;">var results = <span style="color: #0000ff;">string.IsNullOrEmpty(key) ? lst : lst.Where(x =><span style="color: #000000;"> x.Name.Contains(key));
response = <span style="color: #0000ff;">new<span style="color: #000000;"> HttpResponseMessage(HttpStatusCode.OK)
{
Content = <span style="color: #0000ff;">new StringContent(JsonConvert.SerializeObject(<span style="color: #0000ff;">new { _code = <span style="color: #800080;">200,_data =<span style="color: #000000;"> results }))
};
<span style="color: #0000ff;">return<span style="color: #000000;"> response;
});
}
}
}
{
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> OrderController : ApiController
{
<span style="color: #008000;">//<span style="color: #008000;"> GET: api/Order
<span style="color: #000000;"> [HttpGet]
[Route(<span style="color: #800000;">"<span style="color: #800000;">api/order/lists/{key?}<span style="color: #800000;">"<span style="color: #000000;">)]
<span style="color: #0000ff;">public <span style="color: #0000ff;">async Task
{
<span style="color: #0000ff;">return <span style="color: #0000ff;">await Task.Run(() =><span style="color: #000000;">
{
HttpResponseMessage response = <span style="color: #0000ff;">new<span style="color: #000000;"> HttpResponseMessage(HttpStatusCode.Accepted);
List
<span style="color: #0000ff;">new Order(){ Id=Guid.NewGuid(),Dt=DateTime.Now,Name=<span style="color: #800000;">"<span style="color: #800000;">飞机<span style="color: #800000;">",Price=<span style="color: #800080;">2222222<span style="color: #000000;">},<span style="color: #0000ff;">new Order(){ Id=Guid.NewGuid(),Name=<span style="color: #800000;">"<span style="color: #800000;">飞机2<span style="color: #800000;">",Name=<span style="color: #800000;">"<span style="color: #800000;">飞机3<span style="color: #800000;">",Name=<span style="color: #800000;">"<span style="color: #800000;">飞机4<span style="color: #800000;">",Name=<span style="color: #800000;">"<span style="color: #800000;">飞机5<span style="color: #800000;">",Name=<span style="color: #800000;">"<span style="color: #800000;">飞机6<span style="color: #800000;">",};
<span style="color: #0000ff;">var results = <span style="color: #0000ff;">string.IsNullOrEmpty(key) ? lst : lst.Where(x =><span style="color: #000000;"> x.Name.Contains(key));
response = <span style="color: #0000ff;">new<span style="color: #000000;"> HttpResponseMessage(HttpStatusCode.OK)
{
Content = <span style="color: #0000ff;">new StringContent(JsonConvert.SerializeObject(<span style="color: #0000ff;">new { _code = <span style="color: #800080;">200,_data =<span style="color: #000000;"> results }))
};
<span style="color: #0000ff;">return<span style="color: #000000;"> response;
});
}
}
}
标签添加指令ng-app。
总结
分享一下,在网上也找了一些资料,并没有具体的分层方式。我这里抛砖引玉,希望有个更好的方案。
原文链接:https://www.f2er.com/angularjs/191488.html