微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[Angularjs]asp.net mvc+angularjs+web api单页应用详解

写在前面

文章,关于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) {

    deferred.reject(data);   </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 声明执行失败,即服务器返回<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',cope,$http,$location,$routeParams,requestService) { console.log('StoreController' (!cope.productKey) { $scope.productKey = "飞机"cope.productKey).then( (data._code === 200cope.orders =

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;">>

添加视图,作为呈现的页面

stem; stem.Collections.Generic; stem.Linq; stem.Web; stem.Web.Mvc;

<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();
}
}
}

一个添加指定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;">>

stem; stem.Collections.Generic; stem.Linq; stem.Net; stem.Net.Http; stem.Threading.Tasks; stem.Web.Http; <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;
});
}
}
}

标签添加指令ng-app。

总结

分享一下,在网上也找了一些资料,并没有具体的分层方式。我这里抛砖引玉,希望有个更好的方案。

Demo Url: 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐