还是服务

在调试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生成相关推荐

  1. [转载][记录]javascript生成不重复的随机数

    参考链接:javascript生成不重复的随机数 项目播放视频,是无序的,有上下两个按钮,所以需要生成1,8不重复的随机数数组,如: 7,4,8,6,1,5,3,2 然后再split一次,就是数组了. ...

  2. Bootstrap HTML 编码规范之JavaScript生成的标签

    JavaScript生成的标签 通过 JavaScript 生成的标签让内容变得不易查找.编辑,并且降低性能.能避免时尽量避免. 关于作者 歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HT ...

  3. 使用JavaScript生成二维码教程-附qrcodejs中文文档

    使用javascript生成二维码 依赖jquery 需要使用到的库 https://github.com/davidshimj... DIV <div id="qrcode" ...

  4. 使用javascript生成的植物显示过程特效

    查看效果:http://keleyi.com/keleyi/phtml/html5/33.htm .NET版本:http://keleyi.com/a/bjac/66mql4bc.htm 完整HTML ...

  5. 用html js制作迷宫,JavaScript生成随机迷宫详解

    本篇教程介绍了JavaScript生成随机迷宫详解,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < #先看生成随机迷宫的代码吧↓ 1 2 3 生成随机迷宫v ...

  6. javascript生成二维码

    http://www.w3dev.cn/article/20140617/javascript-create-QR-code.aspx jquery.qrcode.js 是居于jquery类库的绘制二 ...

  7. JavaScript 生成唯一ID的几种方式

    这篇文章主要介绍了JavaScript 生成唯一ID的几种方式,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下. 编程的世界里,在很多的时候,我们都需要一个唯一的ID来代表一些数 ...

  8. javascript生成随机四位数

    在网页编程中,经常会用到随机数,像生成订单号这些都会用到. 今天小编分享的是使用javascript生成随机四位数,以下为实例代码. <input type="button" ...

  9. JavaScript生成canvas印章

    JavaScript生成印章,在浏览器中可保存为图片 <!DOCTYPE html> <html lang="zh"><head><met ...

最新文章

  1. 【数据库】Navicat Premium12远程连接MySQL数据库
  2. 值类型和引用类型的区别
  3. java 当地时间_【JAVA】获取当地时间
  4. leetcode实践:通过链表存储两数之和
  5. golang 返回值问题
  6. 基础编程题目集 6-13 折半查找 (15 分)
  7. python_07 函数作用域、匿名函数
  8. Jquery cookies 记忆菜单
  9. 父与子一起学python3_父与子的编程之旅:与小卡特一起学python
  10. 计算机内存体系与Java 内存模型
  11. c语言双人贪吃蛇-基于图形库实现
  12. 网上十大经典黑客软件大曝光(转)
  13. 单片机实验报告实验七:定时器实验
  14. viewpager实现3D画廊的方法
  15. 「新手指南」如何在Mac上格式化U盘和移动硬盘?
  16. oracle mysql 同义词_Oracle数据库同义词
  17. 世界陶瓷卫浴100强榜单发布!
  18. excel表格怎么换行?单元格内换行的4个方法
  19. 分段多项式及样条估计
  20. PPTP中的PAC 和PNS

热门文章

  1. 物联网专用卡的优势有哪些
  2. 数组赋偶数值并求出平均值
  3. C++算法学习(力扣:402. 移掉K位数字)
  4. python内存分配失败_关于python:如何避免[Errno 12]无法分配使用子进程模块导致的内存错误...
  5. python中类的定义方法_Python类的定义、方法和属性使用
  6. c语言求前缀后缀大全,温故而知新_C语言_前缀++(--)和后缀++(--)
  7. owncloud 10.0 php,基于Linux云服务器CentOS 7上安装OwnCloud 10.0.8
  8. 李煜东算法进阶指南打卡题解
  9. 服务器本地打开asp文件路径,服务器本地打开asp文件
  10. python执行不了elif_浅谈对python中if、elif、else的误解