ABP之Javascript生成
还是服务
在调试SimpleTaskSystem的AngularJs demo时,一开始我只看到对服务的应用。
app.controller(controllerId, ['$scope', 'abp.services.tasksystem.task',function($scope, taskService){}]);
在查找源代码中的所有js文件后还是没找到abp.services.tasksystem.task的定义,那么现在就剩下最后一种情况。这些服务是系统生成的,这样的话与动态WebApi的设计思路也是一致的。在layout.cshtml中有两处js引用
<script src="~/api/AbpServiceProxies/GetAll?type=angular"></script><script src="~/AbpScripts/GetScripts" type="text/javascript"></script>
生成所有服务
~/api/AbpServiceProxies/GetAll?type=angular 对应的就是就是Abp对系统所有服务生成的JavaScript,现在对url进行反推我们可以在Abp.Web.Api中找到AbpServiceProxiesController,其中有一ScriptProxyManager 类型的字段_scriptProxyManager。ScriptProxyManager就是生成所有服务的一管理者。
在AbpServiceProxiesController中的GetAll方法有一参数type。这个参数表示根据什么js框架生成javascript,目前Abp提供了Angular与jQuery两种支持。
在ScriptProxyManager中会根据不同的type调用不同的IScriptProxyGenerator生成javascript代码。以Angular的实现AngularProxyGenerator为例。
public string Generate(){var script = new StringBuilder();script.AppendLine("(function (abp, angular) {");script.AppendLine("");script.AppendLine(" if (!angular) {");script.AppendLine(" return;");script.AppendLine(" }");script.AppendLine(" ");script.AppendLine(" var abpModule = angular.module('abp');");script.AppendLine(" ");script.AppendLine(" abpModule.factory('abp.services." + _controllerInfo.ServiceName.Replace("/", ".") + "', [");script.AppendLine(" '$http', function ($http) {");script.AppendLine(" return new function () {");foreach (var methodInfo in _controllerInfo.Actions.Values){var actionWriter = CreateActionScriptWriter(_controllerInfo, methodInfo);script.AppendLine(" this." + methodInfo.ActionName.ToCamelCase() + " = function (" + GenerateJsMethodParameterList(methodInfo.Method) + ") {");script.AppendLine(" return $http(angular.extend({");script.AppendLine(" abp: true,");script.AppendLine(" url: abp.appPath + '" + actionWriter.GetUrl() + "',");actionWriter.WriteTo(script);script.AppendLine(" }, httpParams));");script.AppendLine(" };");script.AppendLine(" ");}script.AppendLine(" };");script.AppendLine(" }");script.AppendLine(" ]);");script.AppendLine();//generate all methods script.AppendLine();script.AppendLine("})((abp || (abp = {})), (angular || undefined));");return script.ToString();}
View Code
AngularProxyGenerator对所有的服务与Action进行了扫描生成javascript。
不过将所有服务都返回到客户端,好像并不怎么安全。
另外ScriptProxyManager对生成的javascript代码进行了缓存。
基础配置
~/AbpScripts/GetScripts对应的则是Abp.Web.Mvc下的AbpScriptsController,AbpScriptsController主要提供一些基础的配置信息到客户端。
[DisableAuditing]public async Task<ActionResult> GetScripts(){var sb = new StringBuilder();sb.AppendLine(_multiTenancyScriptManager.GetScript());sb.AppendLine();sb.AppendLine(_sessionScriptManager.GetScript());sb.AppendLine();sb.AppendLine(_localizationScriptManager.GetScript());sb.AppendLine();sb.AppendLine(await _authorizationScriptManager.GetScriptAsync());sb.AppendLine();sb.AppendLine(await _navigationScriptManager.GetScriptAsync());sb.AppendLine();sb.AppendLine(await _settingScriptManager.GetScriptAsync());sb.AppendLine(GetTriggerScript());return Content(sb.ToString(), "application/x-javascript", Encoding.UTF8);}
这些信息分别是:
接口 |
实现 |
说明 |
IMultiTenancyScriptManager |
MultiTenancyScriptManager |
多租户配置 |
ISettingScriptManager |
SettingScriptManager |
Abp基础配置 |
INavigationScriptManager |
NavigationScriptManager |
导航信息 |
ILocalizationScriptManager |
LocalizationScriptManager |
本地化 |
IAuthorizationScriptManager |
AuthorizationScriptManager |
权限 |
ISessionScriptManager |
SessionScriptManager |
Session信息 |
转载于:https://www.cnblogs.com/gangtianci/p/4696484.html
ABP之Javascript生成相关推荐
- [转载][记录]javascript生成不重复的随机数
参考链接:javascript生成不重复的随机数 项目播放视频,是无序的,有上下两个按钮,所以需要生成1,8不重复的随机数数组,如: 7,4,8,6,1,5,3,2 然后再split一次,就是数组了. ...
- Bootstrap HTML 编码规范之JavaScript生成的标签
JavaScript生成的标签 通过 JavaScript 生成的标签让内容变得不易查找.编辑,并且降低性能.能避免时尽量避免. 关于作者 歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HT ...
- 使用JavaScript生成二维码教程-附qrcodejs中文文档
使用javascript生成二维码 依赖jquery 需要使用到的库 https://github.com/davidshimj... DIV <div id="qrcode" ...
- 使用javascript生成的植物显示过程特效
查看效果:http://keleyi.com/keleyi/phtml/html5/33.htm .NET版本:http://keleyi.com/a/bjac/66mql4bc.htm 完整HTML ...
- 用html js制作迷宫,JavaScript生成随机迷宫详解
本篇教程介绍了JavaScript生成随机迷宫详解,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < #先看生成随机迷宫的代码吧↓ 1 2 3 生成随机迷宫v ...
- javascript生成二维码
http://www.w3dev.cn/article/20140617/javascript-create-QR-code.aspx jquery.qrcode.js 是居于jquery类库的绘制二 ...
- JavaScript 生成唯一ID的几种方式
这篇文章主要介绍了JavaScript 生成唯一ID的几种方式,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下. 编程的世界里,在很多的时候,我们都需要一个唯一的ID来代表一些数 ...
- javascript生成随机四位数
在网页编程中,经常会用到随机数,像生成订单号这些都会用到. 今天小编分享的是使用javascript生成随机四位数,以下为实例代码. <input type="button" ...
- JavaScript生成canvas印章
JavaScript生成印章,在浏览器中可保存为图片 <!DOCTYPE html> <html lang="zh"><head><met ...
最新文章
- 【数据库】Navicat Premium12远程连接MySQL数据库
- 值类型和引用类型的区别
- java 当地时间_【JAVA】获取当地时间
- leetcode实践:通过链表存储两数之和
- golang 返回值问题
- 基础编程题目集 6-13 折半查找 (15 分)
- python_07 函数作用域、匿名函数
- Jquery cookies 记忆菜单
- 父与子一起学python3_父与子的编程之旅:与小卡特一起学python
- 计算机内存体系与Java 内存模型
- c语言双人贪吃蛇-基于图形库实现
- 网上十大经典黑客软件大曝光(转)
- 单片机实验报告实验七:定时器实验
- viewpager实现3D画廊的方法
- 「新手指南」如何在Mac上格式化U盘和移动硬盘?
- oracle mysql 同义词_Oracle数据库同义词
- 世界陶瓷卫浴100强榜单发布!
- excel表格怎么换行?单元格内换行的4个方法
- 分段多项式及样条估计
- PPTP中的PAC 和PNS
热门文章
- 物联网专用卡的优势有哪些
- 数组赋偶数值并求出平均值
- C++算法学习(力扣:402. 移掉K位数字)
- python内存分配失败_关于python:如何避免[Errno 12]无法分配使用子进程模块导致的内存错误...
- python中类的定义方法_Python类的定义、方法和属性使用
- c语言求前缀后缀大全,温故而知新_C语言_前缀++(--)和后缀++(--)
- owncloud 10.0 php,基于Linux云服务器CentOS 7上安装OwnCloud 10.0.8
- 李煜东算法进阶指南打卡题解
- 服务器本地打开asp文件路径,服务器本地打开asp文件
- python执行不了elif_浅谈对python中if、elif、else的误解