angularjs中的factory,service与provider的区别

angularjs中的factory,service与provider的区别,第1张

在Angular中,控制器应该是简洁精炼的;一些逻辑和重复性的数据都应该要存储到服务中。控制器就应该在需要他们的时候实例化,在不需要的时候就取消掉。因此,Angular在你每次切换路由的时候,就会清理当前的控制器。但是呢,服务为我们提供了一种长期存储应用数据的方式,同时,也可以在不同的控制器之间统一的使用服务。

Angular为我们提供了三种创建服务的方式:

废话不多说,简要分析一下。

factory新创建了一个对象,然后在这个对象上新添属性,最后返回这个对象。

service使用new关键词进行了实例化。只需要在this上添加属性和方法,服务就会自动的返回this。

factory与service在controller的用法并没有什么不同,不要以为service每次注入controller都要new一次,AngularJS 在初始化的时候,会new一次service,所以当 controller 要求注入 service 的时候,AngularJS 就会把已经 new 过的的 service 给 controller。

注意: Provider 都是 singleton !!!!!

没错,所以就算 service 有 new 这个指令,可是其实也只是做一次而已。

每个要求注入 service 的 components 拿到的都会是同一个service reference。

factory 也是相同的情况,全部系统共用一个 Factory reference。

所以我们才用Provider做controller之间传值的桥梁!!!

Provider:

provider是唯一一种可以创建用来注入到config()函数的服务的方式。想在你的服务启动之前,进行一些模块化的配置的话,就使用provider。

来简单的说明一下 Provider 跟 Factory 和 Service 的关系。个人觉得 Mark Meyer 在 top 10 mistakes angularjs developers make 文章解说的很好。把 code 借来并附上我的注解。

再来看看provider的使用方式:

你可以认为provider有三个部分,第一部分是私有变量和私有函数,这些变量和函数会在以后被修改。第二部分是在appconfig函数里可以访问的变量和函数,所以,他们可以在在其他地方使用之前被修改。注意,这些变量和函数一定要添加到this上面才行。在我们的例子中,appconfig()函数能够修改的只有thingFromConfig。第三部分是在控制器里可以访问的变量和函数。

当使用 provider创建服务的时候,唯一可以让控制器访问的属性和方法是在$get()函数里返回的属性和方法。将$get添加到了this上面,最终这个函数会被返回。

最简单的就是用Random产生1个随机数,随机数的范围为0~XXlength-1;这样的话比如数组是20个数,那么残生的随机数n就在(0~19)之间,然后把n带进数组XX[n]就可以取出随机索引的数了撒~ INT [] XX = NEW INT [3] {6,5,4};

Random r = new Random(); int n = rNext(0, XXlength-1);XX[n]就是随机取出的数

factory , service , provider都是angular 提供的服务

factory就是原生js里的方法,一个简单的函数

service类似原生里构造函数的过程,拥有一个构造器constructor,也就是说有 new的过程,追加属性和方法都是在this上追加的

provider是服务商当service需要配置的时候,需要使用provider提供服务,例如当使用angular进行跨域访问,需要配置jsonp信息的时候,就可以使用provider进行config的配置,简单理解是service的高级版本,provider提供一个$get的属性来返回 $provider的实例

他们都是单例模式,只实例化一次。

理解 :

provider > service > factory

factory用来配置简单的服务

service是在factory的基础之上加入了面向对象的思想,提供更多功能的服务

provider是在service的基础上进一步改进配置信息

factory与service在底层代码上都来源于provider

例: 可以在factory里写一个>

asp

ASP

abbr

1=ActiveServerPage网络动态服务器网页

2=ApplicationServiceProvider网络应用服务提供商

3=AccessServiceProvider网络存取服务提供商

4=AdvancedServicePlatform高级服务平台

5=AdvancedSignalProcessor高级信号处理器

6=AdvancedSterilizationProcts(美国强生公司生产的)高级消毒产品

7=AdvancedStudyProgram高级学习计划

8=AdvancedSystemPlanning高级系统规划

9=AmericanSellingPrice美国售价

10=ApplicationServiceProtocols应用服务协议

Asp

abbr

1=Americansellingprice美国市价,美国销售价格

asp1

KK:[]

DJ:[]

n

1动角蝰(一种小毒蛇)[C]

asp2

ASP过时了!!

KK:[]

DJ:[]

诗=aspen

ASP是ActiveServerPage的缩写,意为“活动服务器网页”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP的网页文件的格式是asp,现在常用于各种动态网站中。ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。与HTML相比,ASP网页具有以下特点:

(1)利用ASP可以实现突破静态网页的一些功能限制,实现动态网页技术;

(2)ASP文件是包含在HTML代码所组成的文件中的,易于修改和测试;

(3)服务器上的ASP解释程序会在服务器端制定ASP程序,并将结果以HTML格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览ASP所产生的网页;

(4)ASP提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过HTML表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;

(5)ASP可以使用服务器端ActiveX组建来执行各种各样的任务,例如存取数据库、发现哦那个Email或访问文件系统等。

(6)由于服务器是将ASP程序执行的结果以HTML格式传回客户端浏览器,因此使用者不会看到ASP所编写的原始程序代码,可放置ASP程序代码被窃取。

ASP的工作原理:

当在Web站点中融入ASP功能后,将发生以下事情:

1、用户向浏览器地址栏输入网址,默认页面的扩展名是asp。

2、浏览器向服务器发出请求。

3、服务器引擎开始运行ASP程序。

4、ASP文件按照从上到下的顺序开始处理,执行脚本命令,执行HTML页面内容。

5、页面信息发送到浏览器。

ASP的运行环境

asp需要运行在PWS或IIS下。PWS或IIS服务在windows98或windows2000的光盘上附带着,可以通过“添加/删除程序”中的“添加/删除windows组件”来安装。

一般asp需与access数据库或SQLServer数据库结合使用,编出功能强大的程序。

能够运行ASP的web服务器软件

Windows2000默认安装的是IIS50(internetinformationserver),而windowsxp默认安装的是IIS51,windows2003默认安装的IIS60。

PWS(personalwebserver)运行在windows98环境下的简单个人网页服务器。

ASP的意涵与特性

ASP(ApplicationServiceProvider,应用软体租赁服务提供者)即是指「透过网路以租赁方式提供应用软体服务的业者」,即是指业者以应用软体为主体,透过网路一对多地传递服务,这种以服务为主的交易模式促使企业可藉由租赁的方式,以更符合成本效益的方式拥有软体的使用权,并且亦能因为业者集中式的管理而大幅降低企业维护的成本

基本上,ASP即具有「软体服务化,服务网路化」,「资讯委外服务与网路结合」与「产品通路化,通路产品化」等三大特性,其甚至可以被视为是ISP(InternetServiceProvider)与ITS(InformationTechnologyService)的结合

ASP的英文是ApplicationServiceProvider,中文的标准翻译就是“应用服务提

供商”,是指为商业或者个人客户提供管理应用解决方案的公司或者企业。最近

ASP被媒体炒做十分火热,不是IT行业的人面对一堆技术名词专业术语很难弄清楚

ASP的内容,本文试图用浅显的语言来为广大的读者揭开ASP神秘的面纱,对于IT

行业的大热门ASP领域有一些基本的认识。

1ASP是什么东西?

简单地讲,ASP就是为客户提供服务的服务商,它和会计事物所、婚姻介绍所没有

什么本质方面的区别。不同的是ASP主要是通过INTERNET(国际互联网络)作为主

要工作和业务工具,采用一对多的方式,向企业、公司提供标准化的应用软件以

及相关的技术咨询、管理租赁的服务,ASP的概念最早是1998年由美国人提出来的

。目前被全球各大IT厂商看好并被认为是可以推动网络经济发展的,有稳固基础

的第三种网络商业模式。

和传统的外包服务(Outsourcing)相比,ASP的主要区别在于:ASP是一对多的经

营模式,提供的服务有兼容性和可协调性,并且ASP的收费方式一般是按月收费。

业界认为:ASP一般有这样一些“成员”:电信运营商、传统IT服务厂商、互联网

络接入服务商(ISP)、独立软件供应商(ISV)、系统集成商和单纯的ASP公司。

根据流行的观点,ASP有如下五个核心内涵:

aASP着重应用为中心,提供对于应用方面的访问和管理。

bASP服务可以为用户提供没有在服务器、人员、系统和系统授权等前期资源投

入情况下就可以在“定制”的全新应用系统环境进行访问的服务,如ISP,而这样

的服务一般按月份ASP收取服务费。

cASP采用集中管理的方式---ASP一般都有一个管理中心,所有的客户通过INTE

RNET来进行远程访问,获得技术支持和咨询服务。

d一对多的服务,也就是讲,ASP提供的是标准化的产品包,产品都是最低程度

的自定义或者没有实现客户定制化,对于行业用户来讲已经达到实用方便的标准

e按照合同交付,在ASP客户的眼中,ASP是一家根据客户协议内容提供相关服务

,保证应用服务系统服务可以得到确实履行的机构。

2ASP为什么会火?

从大的方面来讲,困扰国内企业生存、发展的核心问题是管理问题。随着互联网

络的普及和应用的深入,企业用户可以随时随地直接租用ASP的服务器和软件系统

来进行自己的业务管理,这样做的好处在于;第一,企业可以节省大笔用于IT建

设方面的资金,大幅度降低企业管理信息化的成本。第二,ASP的用户可以采用各

种方式获得应用和服务,软件类服务产品完全可以通过网络在非常短的时间内组

成一个完善的、高效的、先进的企业管理系统,迅速获得企业一体化的运营管理

方案。

网络经济发展突飞猛进,电子商务一日千里,网络和网站从门户到内容、从注意

力到垂直性,目前逐渐转向热衷ASP也是一个主要的原因。

笔者资料中,国内最早对ASP触电的是网友“飞鸟”,在1998年6月自发组织了研

究、交流和探讨ASP技术的“飞鸟之家”,现在已经发展成为chinaaspcom,成为

国内最早的ASP应用技术服务提供商网站。上海的互易网络有限公司结合国内实际

情况,推出了为国内企业服务的ASP平台互易网,向企业提供以电子商务为核心的

,企业内、外部网络设施和应用的远程构架和托管服务,创造虚拟企业门户(EP

)直接将ASP应用到商业增殖环节中去。

此外,ISP也全面转向ASP的怀抱,成为ISP进一步发展的产物。软件商对于ASP更

是情有独钟。业界最新的消息是,中国第三电信“网通”已经制定ASP发展战略,

国内最大的管理咨询公司“汉普”将把旗下八个子公司定位在企业内部资源计划

管理(ERP)领域的ASP中,北京“联成互动”瞄准客户关系管理(CRM)领域的A

SP,北京“数码方舟”定位在网络办公的ASP,HP正在和中国建设银行讨论共建金

融领域的ASP。

ASP正在IT经济大潮中显山露水,其发展前景不可估量。

3ASP的发展阶段和面临的问题

以网络服务商、软件厂商和ISP为主力的各种IT角色,正在根据自己的优势条件出

发对ASP领域进行多种方面的尝试。就目前阶段来讲,ASP提供的服务不计其数五

花八门,没有标准化和量化的概念,硬件厂商向ASP的“土壤”和势力方向靠拢,

软件厂商和ISP则直接参与到ASP业务的第一线。

笔者估计,经过一段时间的试探和发展,ASP将向服务集成方面发展,产品和服务

初步的标准化将很快建立起来,接着进入到市场细化和标准制定、ASP产品成熟时

期,ASP的稳步增长,最终将成为IT行业商务模式的核心!

目前在ASP发展的道路上,主要面临的问题是观念的转变方面:用租赁代替购买,

服务集成代替产品经销商、服务经济代替产品经济等等。具体到实际方面来讲,

安全和服务的质量是ASP和客户共同关心的头等大事,要实现ASP提出的“租赁高

科技”的口号,ASP任重而道远!

ASP常用内置函数

1,日期/时间函数

这些函数包括对“年”、“月”、“日”、“时”、“分”、“秒”、“星期”等的显示。

(1)Now函数:根据计算机系统设定的日期和时间,返回当前的日期和时间值。使用方法now();

(2)Date函数:只返回当前计算机系统设定的日期值。使用方法:date();

(3)Time函数:只返回当前计算机系统设定的时间值。使用方法:time();

(4)Year函数:返回一个代表某年的整数。使用方法:year(date),其中date参数是任意的可以代表日期的参数,比如“year(date())”就表示是从“date()”得出的日期中提取其中“年”的整数。

另外,还可以这样应用:“year(520,2006)”表示提取“2006年5月20日”中“年”的整数值。关于“520,2006”,也可使用“5-20-2006”、“5/20/2006”等形式表现,即“某月某日”和“某年”的组合。同时注意使用“”进行包括以表示日期值。

(5)Month函数:返回1到12之间的整数值,表示一年中某月。使用方法:month(date)。关于参数date的说明和year函数相同。但要注意日期的正确性,比如“13-31-2006”,根本就没有“13”月,肯定是错误的了。

(6)Day函数:返回1到31之间的整数值,表示一个月中的某天。使用方法:day(date)。关于参数date的说明和year函数相同。同样要注意日期的正确性,比如“2-30-2006”其中对“2”月定义的“30”日这天就是错误的。

(7)Hour函数:返回0到23之间的整数值,表示一天中的某个小时。使用方法:hour(time)。其中参数time是任意的可代表时间的表达式。比如“hour(time())”就表示是从“time()”得出的时间中提取其中“小时”的整数。同样,参数time还可以这样应用“hour(11:45:50)”表示从“11”时“45”分“50”秒中提取当前小时数。当然,定义的时间要符合时间的规范。

(8)Minute函数:返回0到59之间的整数值,表示一小时中的某分钟。使用方法:minute(time)。time参数的说明和hour函数相同。

(9)Second函数:返回0到59之间的整数值,表示一分钟中的某秒。使用方法:second(time)。time参数的说明和hour函数相同。

(10)Weekday函数:返回一个星期中某天的整数。使用方法:weekday(date)。关于参数date的说明和year函数相同。该函数返回值为“1”到“7”,分别代表“星期日”、“星期一”“星期六”。比如当返回值是“4”时就表示“星期三”。

(11)WeekDayName函数:返回一个星期中具体某天的字符串。相对weekday函数而言即翻译出“星期几”,使用方法:weekdayname(weekday)。参数weekday即星期中具体某天的数值。比如“weekdayname(weekday(date()))”就表示当前是“星期几”。因为“date()”表示的是当前的时间,而“weekday(date())”就表示的是一星期中具体某天的整数。

当然weekdayname函数最终显示的字符串内容还与当前 *** 作系统语系有关,比如中文 *** 作系统将显示“星期一”这类的中文字符,而英文 *** 作系统则显示为“Mon”(Monday简写)。

此外,在VBScript中还有一些关于时间间隔的计算函数:

(1)DateAdd函数:返回指定时间间隔的日期、时间。可以计算出相隔多少年、或相隔几个月、又或相隔几个小时等的新日期、时间。使用方法:dateadd(interval,number,date)。

其中参数interval表示需要添加的时间间隔单位。其是以字符串的形式表达的,比如“yyyy”表示年,“q”表示季度,“m”表示月份,“d”表示天数,“ww”表示周数,“h”表示小时数,“n”表示分钟数,“s”表示秒数。

而参数number则表示添加的时间间隔数。其是以数值的形式表达的,可以为负值。参数date则要求是日期、时间的正确格式。

比如dateadd("d",100,"2006-5-20")就表示2006年5月20号以后的100天的日期值:2006-8-28。再比如dateadd("h",-12,"2005-5-2010:00:00")就表示2005年5月20号上午10点前的12小时的日期时间:2005-5-1922:00:00。

(2)DateDiff函数:返回两个日期时间之间的间隔。可计算出两个日期相隔的年代、小时数等。使用方法:datediff(interval,date1,date2)。

参数interval和dateadd函数中的interval参数内容描述相同,date1和date2参数分别就是相互比较的两个日期时间。另外,当date1的日期时间值大于date2时,将显示为负值。

比如DateDiff("yyyy","1982-7-18",date)表示某人的出生到现在已经多少年了。又比如DateDiff("d","1982-7-18","2062-7-18")则计算了80年过了多少天:29220。

2,字符串处理函数

在脚本的功能处理中,通常需要对一些字符串进行一些修饰性处理。比如过滤掉字符串中的敏感字眼以符合最终显示的要求;又比如一段较长的字符串,需要提取开头的几个字符时。

(1)Asc函数:返回字符串中第一个字母对应的ANSI字符代码。使用方法:asc(string)。其中string参数表示字符串。

(2)Chr函数:返回指定了ANSI字符代码对应的字符。使用方法:chr(chrcode)。参数chrcode是相关的标识数字。该函数的功能和asc函数形成对应。

比如:asc(“a”)表示小写字母“a”的ANSI字符“97”;同样chr(97)表示的就是“小写字母a”。另外chr(chrcode)中参数chrcode值为0到31的数字时,表示不可打印的ASCII码。比如“chr(10)”表示换行符,“chr(13)”表示回车符等,这常用于输入和显示格式的转换中。

(3)Len函数:返回字符串内字符的数目(字节数)。使用方法:len(string)。比如len(“love”)的值就是4。

(4)LCase函数:返回所有字符串的小写形式。使用方法:lcase(string)。比如lcase(“CNBruce”)返回为“cnbruce”。

(5)UCase函数:返回所有字符串的大写形式。与lcase函数形成对应。同样,ucase(“CNBruce”)返回为“CNBRUCE”。

(6)Trim函数、LTrim函数和RTrim函数:分别返回前导和后续不带空格、前导不带空格或后续不带空格的字符串内容。比如:

trim(“cnbruce”)返回为“cnbruce”,前导和后续都不带空格;

ltrim(“cnbruce”)返回为“cnbruce”,前导不带空格;

rtrim(“cnbruce”)返回为“cnbruce”,后续不带空格;

该函数常用于注册信息中,比如确保注册用户名前或后的空格。

(7)Left函数:返回从字符串的左边算起的指定数目的字符。使用方法:left(string,length)。比如left(“brousce”,5)返回为“brous”,即前五位字符。

(8)Right函数:返回从字符串的左边算起的指定数目的字符。使用方法:right(string,length)。比如right(“brousce”,4)返回为“usce”,即后四位字符。

(9)instr函数:返回某字符串在另一字符串中第一次出现的位置。比如现在查找字母“A”在字符串“A110B121C119D1861”中第一次出现的位置,则可以instr(my_string,"A110B121C119D1861")

(10)Mid函数:从字符串中返回指定数目的字符。比如现在的“110”则应该是从字符串“A110B121C119D1861”的第2位取得3个单

/// <summary>

/// DES密钥

/// </summary>

private const string KEY_64 = "11111111";//注意了,是8个字符,64位

/// <summary>

/// DES向量

/// </summary>

private const string IV_64 = "11111111";

/// <summary>

/// 加密DES

/// </summary>

/// <param name="data">需要加密的字符串</param>

/// <returns>加密后的字符串</returns>

public static string EncodeDES(string data)

{

byte[] byKey = SystemTextASCIIEncodingASCIIGetBytes(KEY_64);

byte[] byIV = SystemTextASCIIEncodingASCIIGetBytes(IV_64);

DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();

int i = cryptoProviderKeySize;

MemoryStream ms = new MemoryStream();

CryptoStream cst = new CryptoStream(ms, cryptoProviderCreateEncryptor(byKey, byIV), CryptoStreamModeWrite);

StreamWriter sw = new StreamWriter(cst);

swWrite(data);

swFlush();

cstFlushFinalBlock();

swFlush();

return ConvertToBase64String(msGetBuffer(), 0, (int)msLength);

}

/// <summary>

/// 解密DES

/// </summary>

/// <param name="data">需要解密的字符串</param>

/// <returns>解密后的字符串</returns>

public static string DecodeDES(string data)

{

byte[] byKey = SystemTextASCIIEncodingASCIIGetBytes(KEY_64);

byte[] byIV = SystemTextASCIIEncodingASCIIGetBytes(IV_64);

byte[] byEnc;

try

{

byEnc = ConvertFromBase64String(data);

}

catch

{

return null;

}

DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();

MemoryStream ms = new MemoryStream(byEnc);

CryptoStream cst = new CryptoStream(ms, cryptoProviderCreateDecryptor(byKey, byIV), CryptoStreamModeRead);

StreamReader sr = new StreamReader(cst);

return srReadToEnd();

}

以上就是关于angularjs中的factory,service与provider的区别全部的内容,包括:angularjs中的factory,service与provider的区别、C#中如何从数组中获取一个随机数、factory、service 和 provider 是什么关系等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10072791.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存