Pages: 3/282 First page Previous page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Next page Final page [ View by Articles | List ]
Oct 11
Highslide JS
AngularJS实现注入服务的方法有5种方式:
decorator
constant
value
service
factory
provider
其中provider是一切方法的基础,有点类似于XMLHttpObject,在这个基础之上建立起来的,像jquery的$.ajax等等。

第一种方式:decorator


第二种方式:constant



第三种方式:value


第四种方式:service



第五种方式:factory



第六种方式:provider
Oct 11
理解AngularJS中的依赖注入
AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在。在本文中我们将会解释AngularJS依赖注入系统是如何运行的。

Provider服务($provide)
$provide服务负责告诉Angular如何创造一个新的可注入的东西:即服务(service)。服务会被叫做provider的东西来定义,你可以使用$provide来创建一个provider。你需要使用$provide中的provider方法来定义一个provider,同时你也可以通过要求改服务被注入到一个应用的config函数中来获得$provide服务。下面是一个例子:

代码laycode - v1.1
在上面的例子中我们为一个服务定义了一个叫做greeting的新provider;我么可以把一个叫做greeting的变量注入到任何可注入的函数中(例如控制器,在后面会讲到)然后Angular就会调用这个provider的$get函数来返回这个服务的一个实例。在上面的例子中,被注入的是一个函数,它接受一个叫做name的参数并且根据这个参数alert一条信息。我们可以像下面这样使用它:

代码laycode - v1.1
现在有趣的事情来了。factory,service以及value全部都是用来定义一个providr的简写,它们提供了一种方式来定义一个provider而无需输入所有的复杂的代码。例如,你可以用下面的代码定义一个和前面完全相同的provider:

代码laycode - v1.1
这非常的重要,所以一定要记住:在幕后,AngularJS实际上是在调用前面出现的代码(就是$provide.provider的版本)。从字面上来说,这两种方法基本上没有差别。value方法也一样 – 如果我们需要从$get函数(也就是我们的factory函数)返回的值永远相同的话,我们可以使用value方法来编写更少的代码。例如如果我们的greeting服务总是返回相同的函数,我们可以使用value来进行定义:

代码laycode - v1.1
再一次申明,以上两种方式的效果完全一样 – 只不过是代码的量不同而已。

现在你可能已经注意到了我们使用的烦人的

代码laycode - v1.1
代码了。由于定义一个新的provider是如此的常用,AngularJS在模块对象上直接暴露了provider方法,以此来减少代码的输入量:

代码laycode - v1.1
上面的代码和前面app.config(...)这样?嗦的写法完全相同。

除了上面提到的可以注入的东西之外,还有一个constant方法。基本上,它和value的用法一致。我们会在后面来讨论两者的不同点。

为了巩固前面的学习成果,下面所有的代码所做的都是同一件事情:

代码laycode - v1.1
注入器($injector)
注入器负责从我们通过$provide创建的服务中创建注入的实例。只要你编写了一个带有可注入性的参数,你都能看到注入器是如何运行的。每一个AngularJS应用都有唯一一个$injector,当应用启动的时候它被创造出来,你可以通过将$injector注入到任何可注入函数中来得到它($injector知道如何注入它自己!)。

一旦你拥有了$injector,你可以动过调用get函数来获得任何一个已经被定义过的服务的实例。例如:

代码laycode - v1.1
注入器同样也负责将服务注入到函数中;例如,你可以魔法般的将服务注入到任何函数中,只要你使用了注入器的invoke方法:

代码laycode - v1.1
如果注入器只是创建一个服务的实例一次的话,那么它也没什么了不起的。它的厉害之处在于,他能够通过服务名称缓存从一个provider中返回的任何东西,当你下一次再使用这个服务时,你将会得到同一个对象。

因此,你可以通过调用$injector.invike将服务注入到任何函数中也是合情合理的了。包括:

控制器定义函数
指令定义函数
过滤器定义函数
provider中的$get方法(也就是factory函数)
由于constant和value总是返回一个静态值,它们不会通过注入器被调用,因此你不能在其中注入任何东西。

配置provider
你可能会感到困惑:既然factorry和value能够节省那么多的代码,为什么还有人要使用provider。答案是provider允许我们进行一些配置。在前面我们已经提到过当你通过provider(或者其他简写方法)创建一个服务时,你实际上创建了一个新的provider,它将定义你的服务如何被创建。我们没有提到的是,这些provider可以被注入到config函数中,你可以和它们进行一些交互。

首先,AngularJS分两个阶段运行你的应用 – config阶段和run阶段。config阶段是你设置任何的provider的阶段。它也是你设置任何的指令,控制器,过滤器以及其它东西的阶段。在run阶段,AngularJS会编译你的DOM并启动你的应用。

你可以在myMod.config和myMod.run中添加任何代码 – 这两个函数分别在两个阶段运行。正如我们看到的,这些函数都是可以被注入的 – 我们在第一个例子中注入了内建的$provide函数。然而,值得注意的是在config阶段,只有provider能被注入(只有两个例外是$provide和$injector)。

例如,下面的代码就是错误的写法:

代码laycode - v1.1
有一个例外:constant,由于它们不能被改变,因此它不能被注入到config中(这就是它和value之间的不同之处)。它们只能通过名字被获取。

无论何时你为一个服务定义了一个provider,这个provider的名字都是serviceProvider。在这里service是服务的名字。现在我们可以使用provider的力量来做一些更复杂的事情了!

代码laycode - v1.1
现在我们在provider中拥有了一个叫做setText的函数,我们可以使用它来自定义我们alert的内容;我们可以再config中访问这个provider,调用setText方法并自定义我们的service。当我们最终运行我们的应用时,我们可以获取greeting服务,然后你会看到我们自定义的行为起作用了。

控制器($controller)
控制器函数是可以被注入的,但是控制器本身是不能被注入到任何东西里面去的。这是因为控制器不是通过provider创建的。然而,有一个内建的AngularJS服务叫做1$controller,它负责设置你的控制器。当你调用myMod.controller(…)时,你实际上是访问了这个服务的provider,就像上面的例子一样。

例如,当你像下面一样定义了一个控制器时:

代码laycode - v1.1
你实际上做的是下面这件事:

代码laycode - v1.1
当Angular需要创建一个你的控制的实例时,它会使用$controller服务(它反过来会使用$injector来调用你的控制器以便它能够被注入依赖项)。

过滤器和指令
filter和directive和controller的运行方式相同;filter会使用一个叫做$filter的服务以及它的provider $filterProvider,而directive使用一个叫做$compile的服务以及它的provider $compileProvidr。下面是相应的文档:

其中,myMod.filter和myMod.directive分别是这些服务的简写。

总结
总结一下,任何能够被$injector.invoke调用的函数都是能被注入的。包括,但不限于下面的这些:

控制器
指令
factory
过滤器
provider中的$get函数
provider函数
服务
provider创建的新服务都可以用来注入。包括:

constant
factory
provider
service
value
另外,内建的服务$controller和$filter也可以被注入,同时你也可以使用这些服务来获得新的过滤器和控制器。

本文译自Understanding Dependency Injection,原文地址https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection
Oct 8
MVC三个组成部分:Model 、View、Controller。今天主要想和大家分享的是View这一块。微软的MVC摒弃了之前的aspx页面的拖拖控件就能搞定的理念,因为发现那样会把程序员惯成傻子,而做出来的网站毫无性能可言,慢的像猪头!所以在展示页面View这一部分的操作几乎就是纯手工写html代码了。这对于程序员来说也挺苦恼的,因为从轻松拖控件直接升级为纯手工写代码(当然,可能难度不大,但是其中的麻烦是不可言喻的)。幸好微软推出了HtmlHelper,方便了我们写html代码,大大提高了效率。

  何为HtmlHelper?HtmlHelper也好SQLHelper也好,说白了就是把很多代码封装起来,然后供我们调用,用于节省开发时间,降低错误率。好了闲言少叙,开始正题;如果我们用MVC做一个简单的文章回复功能,View层中写一个TextBox一个TextArea一个Submit按钮,TextBox写标题TextArea写内容然后一点Submit就可以搞定了,这样看起来没什么问题。但是想一想如果在提交回复时出现了错误,没提交成功。按道理说在TextBox和TextArea中应该还保存刚才我们写的内容的,但是可惜View层中已经没有了ViewState。于是乎悲催的事情发生了,我们写了半天的评论,一点按钮,一个小错误没成功,回来后啥都没了,傻眼了!这样该怎么办呢?好办啊!在Controller里面给控件赋值不就可以了吗?想法很好,但可惜MVC模式中Controller操作View中的控件是犯法的!这怎么办?于是乎htmlhelper应运而生! 在View中将手写的TextBox和TextArea删掉,然后用HtmlHelper,具体代码如下:标题: <%:Html.TextBox("txtTitle","txtTitle") %>评论内容: <%:Html.TextArea("txtContent") %>这两个尖括号里里面的东西就是HtmlHelper了。以第一个为例:先写尖括号百分号然后是冒号,但是我们知道啊在WebForm时代,我们也这样在html里面加C#代码但是百分号后面往往是等号,那冒号和百分号的区别是什么呢?诸位可以试一下,冒号包裹的内容如果含有尖括号等的html标签,会识别出来。而等号不识别而是直接把内容显示出来。Html.TextBox里面的参数,第一个是该TextBox的Name属性,第二个是Value属性,当然还可以设置它的样式了 <%:Html.TextBox("txtTitle", "txtTitle", new { disable="none",....})%>大括号里面写属性,多个时用逗号隔开。在Controller里面可以通过ViewData["txtTitle"]进行取值和赋值。这样子一个HtmlHelper基本上就出炉了。

  当然有很多公司都有自己的HtmlHelper,然后今天就研究了一下,应该怎样写出自己的HtmlHelper,然后查看代码发现了所谓的每一个控件的HtmlHelper其实就是分别写一个类然后对HtmlHelper进行扩展,然后便写了一个扩展的类实现了一个特殊的Span标签的展示。具体方法如下:新建一个类,命名为SpanExtensions这个类是一个静态类,Public Static Class SpanExtensions  里面写一个方法,GetSpan方法,当然这也是一个静态方法,同时实现对HtmlHelper的扩展,还需要传入一个里面显示内容的参数具体代码如下:

public static string GetLabel(this HtmlHelper helper, string txt)  

  {            

            return string.Format("{0}", txt);

}

  这样在前面的View里面用Htmlhelper调用的时候发现没有,怪了,明明写了的,后来发现原来是SpanExtensions类的命名空间和View不一样,我想引用然后发现如果以后用这个方法的地方很多就太麻烦了,然后就直接把SpanExtensions的命名空间改为View的命名空间,然后就找到了,写完后一运行!发现:亲娘来,连html标签都出来了,难不成还得转?后来看了看HtmlHelper里面的TextBox发现返回值不一样,它的返回值是一个MvcHtmlString类型,啥东西啊?没见过!于是我就想把MvcHtmlString这个东西和String能够联系起来,后来整出来了,代码如下:  MvcHtmlString mc = MvcHtmlString.Create(string.Format("{0}", txt)); 这样直接返回mc就可以搞定了!
Oct 8


在 controller 中可以使用 ControllerContext 取得:



在 view 中可以使用 ViewContext:
Oct 1

 前一段时间想装一下sqlserver,但是一直装不上。搞得我很郁闷,我重装了一下系统。但是还是没有装上。 

     正好今天有时间,所以就尝试着把sqlserver装上。弄了半天,百度了很长时间,终于弄出来了。估计以后大家可能也会遇到,我也加深一下印象,所以记录了下来: 
      大致出错信息如下: 
    RebootRequiredCheck 检查是否需要挂起计算机重新启动。挂起重新启动会导致安装程序失败。 失败 需要重新启动计算机。必须重新启动计算机才能安装 SQL Server。
 
检查出错:
 
Microsoft SQL Server 2008 Setup - System Configuration Check Report
 
Computer Name(s): JH 
Report Date/Time: 2010/11/25 19:16
Saved to Directory: C:Program FilesMicrosoft SQL Server100Setup BootstrapLog20101125_191528SystemConfigurationCheck_Report.htm
 
Rule Name
Rule Description
Result
Message/Corrective Action
 
GlobalRules: 针对规则组“GlobalRules”的 SQL Server 2008 安装程序配置检查
 
RebootRequiredCheck
检查是否需要挂起计算机重新启动。挂起重新启动会导致安装程序失败。
失败
需要重新启动计算机。必须重新启动计算机才能安装 SQL Server。
 
AclPermissionsFacet
检查 SQL Server 注册表项是否一致。
通过
SQL Server 注册表项是一致的,可以支持 SQL Server 安装或升级。
 
MediaPathLength
检查 SQL Server 安装媒体是否太长。
通过
SQL Server 安装媒体不太长。
 
OsVersionCheck
检查计算机是否满足最低操作系统版本要求。 
通过
该操作系统版本满足此产品的最低要求。
 
ThreadHasAdminPrivilegeCheck
检查运行 SQL Server 安装程序的帐户是否具有计算机的管理员权限。
通过
运行 SQL Server 安装程序的帐户具有计算机的管理员权限。
 
WmiServiceStateCheck
检查 WMI 服务是否已在计算机上启动并正在运行。
通过
Windows Management Instrumentation (WMI) 服务正在运行。
 
 
解决步骤:
a 、重启机器,再进行安装,如果发现还有该错误,请按下面步骤 
b、在开始->运行中输入regedit 
c、到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager 位置 
d、在右边窗口右击PendingFileRenameOperations,选择删除,然后确认 
e、重启安装,问题解决 
如果还有同样问题,请检查其它注册表中是否有该值存在,如有请删掉
Sep 22
查询列表中数据丢失,每页10条
以下query全部数据正常
SELECT * FROM TABLE ORDER BY CREATETIME DESC

以下分配查询数据丢失
SELECT * FROM TABLE ORDER BY CREATETIME DESC LIMIT 0,10;
SELECT * FROM TABLE ORDER BY CREATETIME DESC LIMIT 10,10;

怀疑是CREATETIME相同导致分页问题
查看数据库果然发现有3条数据CREATETIME相同

解决:
CREATETIME 类型到毫秒
或者
CREATETIME update时间为不同
或者
增加主键参与排序
ORDER BY CREATETIME,id DESC
Sep 16
我们创造的你,既非圣物又非凡人,
既非永存又飞速朽
因此,你尽可按自己的意志,以自己的名义,
创造自己,建设自己,
我们仅仅让你能够按照自己的自由意志成长、发展。
你也许会蜕变成无理性的畜牲;
但是如果你愿意,也可以开创神圣的生命。
Sep 11

墓床 不指定

tommyhu , 15:13 , 读书 , Comments(0) , Trackbacks(0) , Reads(861) , Via Original
我知道永逝降临,并不悲伤

松林中安放着我的愿望

下边有海,远看像水池

一点点跟我的是下午的阳光

人时已尽,人世很长

我在中间应当休息

走过的人说树枝低了

走过的人说树枝在长
Tags:
Pages: 3/282 First page Previous page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Next page Final page [ View by Articles | List ]