1前言
前端技术的发展是如此之快,各种优秀技术,优秀框架的出现简直让人目不暇接,紧跟时代潮流,学习掌握新知识自然是不敢怠慢。
AngularJS是谷歌在维护,其在国外已经十分火热,可是国内的使用情况却有不小的差距,参考文献/网络文章也很匮乏。这里便将我学习AngularJS写成文档,一方面作为自己学习路程上的记录,另一方面也给有兴趣的同学一些参考。
首先我自己也是一名学习者,会以学习者的角度来整理我的行文思路,这里可能只是些探索,有理解或是技术上的错误还请大家指出;其次我特别喜欢编写小例子来把一件事情说明白,故在文中会尽可能多的用示例加代码讲解,我相信这会是一种比较好的方式;最后,我深知AngularJS的使用方式跟的jquery的的使用方式有很大不同,在大家都有的jquery的,电话分机经验的条件下对于角的学习会困难重重,不过我更相信在大家的坚持下,能够快速的学好AngularJS,至少咱也能深入了解到AngularJS的基本思想,对咱们以后自己的插件开发,项目开发都会有很大的启示。
2 AngularJS概述
2.1 AngularJS是什么?
AngularJs(后面就简称NG了)是一个用于设计动态的网络应用的结构框架。首先,它是一个框架,不是类库,是像EXT一样提供一整套方案用于设计网络应用。它不仅仅是一个JavaScript的的框架,因为它的核心其实是对HTML标签的增强。
何为HTML标签增强其实就是使你能够用标签完成一部分页面逻辑,具体方式就是通过自定义标签,自定义属性等,这些HTML原生没有的标签/属性在NG中有一个名字:指令(指令)。后面会详细介绍。那么,什么又是动态的网络应用呢?与传统的网络系统相区别,网络应用能为用户提供丰富的操作,能够随用户操作不断更新视图而不进行URL跳转.ng官方也声明它更适用于开发CRUD应用,即数据操作比较多的应用,而非是游戏或图像处理类应用。
为了实现这些,NG引入了一些非常棒的特性,包括模板机制,数据绑定,模块,指令,依赖注入,路由。通过数据与模板的绑定,能够让我们摆脱繁琐的DOM操作,而将注意力集中在业务逻辑上。
源地址:https://blog.csdn.net/weixin_33178524/article/details/79179597
另外一个疑问,NG是MVC框架吗?还是MVVM框架?官网有提到纳克的设计采用了MVC的基本思想,而又不完全是MVC,因为在书写代码时我们确实是在用NG-控制器这个指令(起码从名字上看,是MVC吧),但这个控制器处理的业务基本上都是与图进行交互,这么看来又很接近MVVM让我们把目光移到官网那个非醒目的标题上:“AngularJS - 超级英雄JavaScript MVW框架”。
2.2 AngularJS简单介绍
AngularJS重新定义了前端应用的开发方式。面对HTML和JavaScript的之间的界线,它
非但不畏缩不前,反而正面出击,提出了有效的解决方案。
很多前端应用的开发框架,比如骨干,EmberJS等,都要求开发者继承此框架特有的一些JavaScript的的对象。这种方式有其长处,但它不必要地污染了开发者自己代码的对象空间,还要求开发者去了解内存里那些抽象对象。尽管如此我们还是接受了这种方式,因为网络最初的设计无法提供我们今天所需的交互性,于是我们需要框架,来帮我们填补JavaScript的HTML的和之间的鸿沟。而且有了它,你不用再“直接”操控DOM,只要给你的DOM注上的元数据(即AngularJS里的指令们),然后让AngularJS来帮你操纵DOM。同时,AngularJS不依赖(也不妨碍)任何其他的框架。你甚至可以基于其它的框架来开发AngularJS应用。
API地址: http : //docs.angularjs.org/api/ ;
AngularJS在github上的中文粗译版地址:https://github.com/basestyle/angularjs-cn。
2.3什么时候该用AngularJS
AngularJS是一个MV *框架,最适合开发客户端的单页面应用。它不是个功能库,而是用来开发动态网页的框架。它专注于扩展HTML的功能,提供动态数据绑定(数据绑定) ,而且它能跟其它框架(如jQuery的)合作融洽。
如果你要开发的是单页应用,AngularJS就是你的上上之选.Gmail,Google Docs,Twitter和Facebook这样的应用,都很能发挥AngularJS的长处。但是像游戏开发之类对DOM进行大量操纵,又或者单纯需要极高运行速度的应用,就不是AngularJS的用武之地了。
3 AugularJS特性
AngularJS是一个新出现的强大客户端技术,提供给大家的一种开发强大应用的方式。这种方式利用并且扩展HTML,CSS和JavaScript的,并且弥补了它们的一些非常明显的不足。本应该使用HTML来实现而现在由它开发的动态一些内容。
AngularJS有五个最重要的功能和特性:
3.1特性一:双向的数据绑定
数据绑定可能是AngularJS最酷最实用的特性。它能够帮助你避免书写大量的初始代码从而节约开发时间。一个典型的网络应用可能包含了80%的代码用来处理,查询和监听DOM。数据绑定是的代码更少,你可以专注于你的应用。
我们想象一下模型是你的应用中的简单事实。你的模型是你用来读取或者更新的部分。数据绑定指令提供了你的模型投射到视图的方法。这些投射可以无缝的,毫不影响的应用到网络应用中。
传统来说,当模型变化了。开发人员需要手动处理DOM元素并且将属性反映到这些变化中。这个一个双向的过程。一方面,模型变化驱动了DOM中元素变化,另一方面,DOM元素的变化也会影响到模型。这个在用户互动中更加复杂,因为开发人员需要处理和解析
这些互动,然后融合到一个模型中,并且更新视图。这是一个手动的复杂过程,当一个应用非常庞大的时候,将会是一件非常费劲的事情。
这里肯定有更好的解决方案!那就是AngularJS的双向数据绑定,能够同步DOM和型号等等。
这里有一个非常简单的例子,用来演示一个输入输入框和
元素的双向绑定(例01):
<!doctype html>
光引入还不够,我们还需在模块声明中注入对ngRoute的依赖,如下:
var app = angular.module('MyApp', ['ngRoute']);
完成了这些,我们就可以在模板或是controller中使用上面的服务和指令了。下面我们需要定义一个路由表。
第二步:定义路由表
$routeProvider提供了定义路由表的服务,它有两个核心方法,when(path,route)和otherwise(params),先看一下核心中的核心when(path,route)方法。
when(path,route)方法接收两个参数,path是一个string类型,表示该条路由规则所匹配的路径,它将与地址栏的内容($location.path)值进行匹配。如果需要匹配参数,可以在path中使用冒号加名称的方式,如:path为/show/:name,如果地址栏是/show/tom,那么参数name和所对应的值tom便会被保存在$routeParams中,像这样:{name : tom}。我们也可以用*进行模糊匹配,如:/show*/:name将匹配/showInfo/tom。
route参数是一个object,用来指定当path匹配后所需的一系列配置项,包括以下内容:
l controller //function或string类型。在当前模板上执行的controller函数,生成新的scope;
l controllerAs //string类型,为controller指定别名;
l template //string或function类型,视图z所用的模板,这部分内容将被ngView引用;
l templateUrl //string或function类型,当视图模板为单独的html文件或是使用了
你可以把这段代码写在页面头部,这样就不必去请求它了。在实际项目中,你也可以将所有的模板内容集中在一个文件中,只加载一次,然后根据id来取用。
接下来我们来看另一个比较有用的配置:transclude,定义是否将当前元素的内容转移到模板中。看解释有点抽象,不过亲手试试就很清楚了,看下面的代码(例06):
app.directive('sayHello',function(){
return {
restrict : 'E',
template : '
hello, !
',
replace : true,
transclude : true
};
})
指定了transclude为true,并且template修改了一下,加了一个标签,并在上面使用了ng-transclude指令,用来告诉指令把内容转移到的位置。那我们要转移的内容是什么呢?请看使用指令时的变化:
美女
内容是什么你也看到了哈~在运行的时候,美女将会被转移到标签中,原来此配置的作用就是——乾坤大挪移!看效果:
hello, 美女!
这个还是很有用的,因为你定义的指令不可能老是那么简单,只有一个空标签。当你需要对指令中的内容进行处理时,此参数便大有可用。
6.2.4指令的行为参数:compile和link
6.2.3中简单介绍了自定义一个指令的几个简单参数,restrict、template、templateUrl、replace、transclude,这几个理解起来相对容易很多,因为它们只涉及到了表现,而没有涉及行为。我们继续学习ng自定义指令的几个重量级参数:compile和link
l 理解compile和link
不知大家有没有这样的感觉,自己定义指令的时候跟写jQuery插件有几分相似之处,都是先预先定义好页面结构及监听函数,然后在某个元素上调用一下,该元素便拥有了特殊的功能。区别在于,jQuery的侧重点是DOM操作,而ng的指令中除了可以进行DOM操作外,更注重的是数据和模板的绑定。jQuery插件在调用的时候才开始初始化,而ng指令在页面加载进来的时候就被编译服务($compile)初始化好了。
在指令定义对象中,有compile和link两个参数,它们是做什么的呢?从字面意义上看,编译、链接,貌似太抽象了点。其实可大有内涵,为了在自定义指令的时候能正确使用它们,现在有必要了解一下ng是如何编译指令的。
l 指令的解析流程详解
我们知道ng框架会在页面载入完毕的时候,根据ng-app划定的作用域来调用$compile服务进行编译,这个$compile就像一个大总管一样,清点作用域内的DOM元素,看看哪些元素上使用了指令(如
),或者哪些元素本身就是个指令(如
),或者使用了插值指令( {{}}也是一种指令,叫interpolation directive),$compile大总管会把清点好的财产做一个清单,然后根据这些指令的优先级(priority)排列一下,真是个细心的大总管哈~大总管还会根据指令中的配置参数(template,place,transclude等)转换DOM,让指令“初具人形”。
然后就开始按顺序执行各指令的compile函数,注意此处的compile可不是大总管$compile,人家带着$是土豪,此处执行的compile函数是我们指令中配置的,compile函数中可以访问到DOM节点并进行操作,其主要职责就是进行DOM转换,每个compile函数执行完后都会返回一个link函数,这些link函数会被大总管汇合一下组合成一个合体后的link函数,为了好理解,我们可以把它想象成葫芦小金刚,就像是进行了这样的处理。
//合体后的link函数
function AB(){
A(); //子link函数
B(); //子link函数
}
接下来进入link阶段,合体后的link函数被执行。所谓的链接,就是把view和scope链接起来。链接成啥样呢?就是我们熟悉的数据绑定,通过在DOM上注册监听器来动态修改scope中的数据,或者是使用$watchs监听 scope中的变量来修改DOM,从而建立双向绑定。由此也可以断定,葫芦小金刚可以访问到scope和DOM节点。
不要忘了我们在定义指令中还配置着一个link参数呢,这么多link千万别搞混了。那这
个链接函数是干嘛的呢,我们不是有葫芦小金刚了嘛?那我告诉你,其实它是一个小三。此话怎讲?编译函数执行后返回的链接函数,但若没有配置编译函数呢?葫芦小金刚自然就不存在了。
正房不在了,当然就轮到小三出马了,大总管$编译就把这里的链接函数拿来执行。这就意味着,配置的链接函数也可以访问到的范围以及DOM节点。值得注意的是,编译函数通常是不会被配置的,因为我们定义一个指令的时候,大部分情况不会通过编程的方式进行DOM操作,而更多的是进行监听器的注册,数据的绑定。所以,小三名正言顺的被大总管宠爱。
听完了大总管,葫芦小金刚和小三的故事,你是不是对指令的解析过程比较清晰了呢?不过细细推敲,你可能还是会觉得情节生硬,有些细节似乎还是没有透彻的明白,所以还需要再理解下面的知识点:
l compile和link的区别
其实在我看完官方文档后就一直有疑问,为什么监听器,数据绑定不能放在编译函数中,而偏偏要放在链接函数中?为什么有了编译还需要链接?就跟你质疑我编的故事一样,为什么最后小三被宠爱了?所以我们有必要探究一下,编译和链接之间到底有什么区别。好,正房与小三的PK现在开始。
首先是性能举个例子:
LI>
UL>
我们的观察目标是NG-重复指令。假设一个前提是不存在的链接。大总管$编译在编译这段代码时,会查找到NG-重复,然后执行它的编译函数,编译函数根据数组的长度复制出ñ个
标签。而复制出的 节点中还有<输入>节点并且使用了NG-MODLE指令,所以编译还要扫描它并匹配指令,然后绑定监听器。每次循环都做如此多的工作。而更加糟糕的一点是,我们会在程序中向阵列中添加元素,此时页面上会实时更新DOM,每次有新元素进来,编译函数都把上面的步骤再走一遍,岂不是要累死了,这样性能必然不行。
现在扔掉那个假设,在编译的时候编译就只管生成DOM的事,碰到需要绑定监听器的地方先存着,有几个存几个,最后把它们汇总成一个链接函数,然后一并执行。这样就轻松多了,编译只需要执行一次,性能自然提升。
另外一个区别是能力。
尽管编译和链接所做的事情差不多,但它们的能力范围还是不一样的。比如正房能管你的存款,小三就不能。小三能给你初恋的感觉,正房却不能。
我们需要看一下编译函数和链接函数的定义:
函数compile(tElement,tAttrs,transclude){...}
功能链接(范围,iElement,iAttrs,控制器){...}
这些参数都是通过依赖注入而得到的,可以按需声明使用。从名字也容易看出,两个函数各自的职责是什么,编译可以拿到transclude,允许你自己编程管理乾坤大挪移的行为。而链接中可以拿到范围和控制器,可以与范围进行数据绑定,与其他指令进行通信。两者虽然都可以拿到元件,但是还是有区别的,看到各自的前缀了吧?编译拿到的是编译前的,是从模板里拿过来的,而链接拿到的是编译后的,已经与作用域建立了
关联,这也正是链路中可以进行数据绑定的原因。
我暂时只能理解到这个程度了实在不想理解这些知识的话,只要简单记住一个原则就行了。如果指令只进行DOM的修改,不进行数据绑定,那么配置在编译函数中,如果指令要进行数据绑定,那么配置在链接函数中。
6.2.5指令的划分作用域参数:范围
我们在上面写了一个简单的<说问候> 说问候>,能够跟美女打招呼但是看看人家纳克内置的指令,都是这么用的:NG-模型=” M”,NG- repeat =“a in array”,不单单是作为属性,还可以赋值给它,与作用域中的一个变量绑定好,内容就可以动态变化了。假如我们的sayHello可以这样用:美女说问候>,把要对美女说的话写在一个变量的内容中,然后只要在控制器中修改内容的值,页面就可以显示对美女说的不同的话。这样就灵活多了,不至于见了美女只会说一句招呼,然后就没有然后。
为了实现这样的功能,我们需要使用范围参数,下面来介绍一下。
使用范围为指令划分作用域
顾名思义,范围肯定是跟作用域有关的一个参数,它的作用是描述指令与父作用域的关系,这个父作用域是指什么呢想象一下我们使用指令的场景,页面结构应该是这个样子?
美女 say-hello>
DIV>
外层肯定会有一个控制器,而在控制器的定义中大体是这个样子:
var app = angular.module('MyApp',[],function(){console.log('here')});
app.controller( 'TESTC',函数($范围){
$ scope.content ='今天天气真好!';
});
所谓的sayHello的父作用域就是这个名叫TESTC的控制器所管辖的范围,指令与父作用域的关系可以有如下取值:
取值
说明
假
默认值。使用父作用域作为自己的作用域
真正
新建一个作用域,该作用域继承父作用域
JavaScript的对象
与父作用域隔离,并指定可以从父作用域访问的变量
乍一看取值为假和真好像没什么区别,因为取值为真时会继承父作用域,即父作用域中的任何变量都可以访问到,效果跟直接使用父作用域差不多。但细细一想还是有区别的,有了自己的作用域后就可以在里面定义自己的东西,与跟父作用域混在一起是有本质上的区别。好比是父亲的钱你想花多少花多少,可你自己挣的钱父亲能花多少就不好说了。你若想看这两个作用域的区别,可以在连接函数中打印出来看看,还记得链接函数中可以访问到的范围吧。
最有用的还是取值为第三种,一个对象,可以用键值来显式的指明要从父作用域中使用属性的方式。当范围值为一个对象时,我们便建立了一个与父层隔离的作用域,不过也不是完全隔离,我们可以手工搭一座桥梁,并放行某些参数我们要实现对美女说各种话就得靠这个使用起来像这样。:
范围: {
attributeName1:'BINDING_STRATEGY',
attributeName2:'BINDING_STRATEGY',...
}
键为属性名称,值为绑定策略。等等!啥叫绑定策略?最讨厌冒新名词却不解释的行为!别急,听我慢慢道来。
先说属性名称吧,你是不是认为这个ATTRIBUTENAME1就是父作用域中的某个变量名称?错!其实这个属性名称是指令自己的模板中要使用的一个名称,并不对应父作用域中的变量,稍后的例子中我们来说明再来看绑定策略,它的取值按照如下的规则:
符号
说明
举例
@
传递一个字符串作为属性的值
str:'@string'
=
使用父作用域中的一个属性,绑定数据到指令的属性中
名称:'=用户名'
&
使用父作用域中的一个函数,可以在指令中调用
getName:'&getUserName'
总之就是用符号前缀来说明如何为指令传值。你肯定迫不及待要看例子了,我们结合例子看一下,小二,上栗子〜
举例说明
我想要实现上面想像的跟美女多说点话的功能,即我们给sayHello指令加一个属性,通过给属性赋值来动态改变说话的内容主要代码如下:
app.controller( 'TESTC',函数($范围){
$ scope.content ='今天天气真好!';
});
app.directive( '的sayHello',函数(){
返回{
限制:'E',
模板:'
你好,
b>,{{cont}} div>',
替换:true,
转录:是的,
范围 : {
cont:'=发言'
}
};
});
然后在模板中,我们如下使用指令:
美女 say-hello>
DIV>
看看运行效果:
美女今天天气真好!
执行的流程是这样的:
①指令被编译的时候会扫描到模板中的{{cont}},发现是一个表达式;
②查找范围中的规则:通过说与父作用域绑定,方式是传递父作用域中的属性;
③说与父作用域中的内容属性绑定,找到它的值“今天天气真好!”;
④将内容的值显示在模板中。
这样我们说话的内容的内容就跟父作用域绑定到了一其,如果动态修改父作用域的内容的值,页面上的内容就会跟着改变,正如你点击“换句话”所看到的一样。
这个例子也太小儿科了吧简单虽简单,但可以让我们理解清楚,为了检验你是不是真的明白了,可以思考一下如何修改指令定义,能让sayHello的以如下两种方式使用!
美女 span>
美女 span>
答案我就不说了,简单的很。下面有更重要的事情要做,我们说好了要写一个真正能用的东西来着。接下来就结合所学到的东西来写一个折叠菜单,即点击可展开,再点击一次就收缩回去的菜单。
控制器及指令的代码如下(例07):
app.controller( 'TESTC',函数($范围){
$ scope.title ='个人简介';
$ scope.text ='大家好,我是一名前端工程师,我正在研究AngularJs,欢迎大家与我交流';
});
app.directive( '膨胀',函数(){
返回{
限制:'E',
templateUrl:'expanderTemp.html',
替换:true,
转录:是的,
范围 : {
mytitle:'= etitle'
},
link:function(scope,element,attris){
scope.showText = false;
scope.toggleText = function(){
scope.showText =!scope.showText;
}
}
};
});
HTML中的代码如下:
{{mytitle}}
DIV>
DIV>
DIV>
SCRIPT>
{{text}} expandder>
DIV>
还是比较容易看懂的,我只做一点必要的解释。首先我们定义模板的时候使用了ng的一种定义方式
你可能感兴趣的:(angularjs)
github上的学习材料三:前端入门资源汇总
X-Prince
JS 生活 Git
本篇转载自:https://idoras.com/frontend-resources/前言前端无疑是2016年最火热的技术,没有之一。各种前端mvc框架层出不穷,angularjs,vue,react,前端组件化开发概念已经深入人心。前端工资已经比手机端开发还要高了。作为个人站长,学习下前端设计也是有必要的,一来有些小的设计问题可以自己解决,同时还能提高自己的审美,提高网站的ui设计水平。必备基
WEB前端缓存解决方案
qermeng
WEB前端 SPA 缓存 WEB前端缓存解决
WEB前端缓存解决方案问题描述页面缓存js/css缓存问题描述使用angularjs(1.5.0)+gulp(3.9.0)做SPA开发时,修改js后,使用gulp-rev(6.0.1)对文件名进行了修改,但是刷新界面后修改的文件并没有加载,必须使用CRLT+F5深度刷新才可以。页面缓存页面缓存解决方案:js/css缓存通过gulp-rev在文件名增加哈希值来解决缓存问题gulp-rev:Stati
如何学习前端炙手可热的Vue?Vue学习路线图详解!
真·skysys
大前端和跨平台技术 vue
总结vue文档从0.11、0.12、1.0、2.x到3.0beta本文章长期更新,持续维护限于博主水平,如有错漏还望各位不吝赐教文章内容可能有争议,欢迎大家理性交流与探讨What’svue:Vue.js是什么?定位设计目标(初心):通过尽可能简单的API提供响应数据绑定和可组合视图组件灵感来源(创意):AngularJS,KnockoutJS,Ractive.js和Rivets.js。在简单性和功
AngularJS知识快速入门(上)
1加1等于
javascript实战 angular.js 前端 javascript
本文通过一些具体的例子介绍了关于AngularJS的基本使用,包括指令、表达式、过滤器、模块化、MVC以及内置服务模块等等。本文目录AngularJS简介一、表达式二、MVC三、$scope作用域四、模块化五、过滤器六、服务七、指令AngularJS简介AngularJS是由Google开发的一个用于构建动态Web应用的前端JavaScript框架,它遵循MVC(Model-View-Contro
写出优秀的 Git 提交信息:一份详尽指南(Angular 风格)
迎风斯黄
DevOps工程师 git angular.js 前端
在现代软件开发中,良好的Git提交信息不仅有助于项目协作、问题追踪和历史回溯,更是保障项目可维护性的重要一环。本文将基于AngularJS团队广泛使用的Git提交信息规范,手把手教你如何写出专业、统一、可读性强的commitmessage。✨为什么要遵守Git提交规范?遵守统一的提交规范可以带来以下好处:✅自动生成清晰的CHANGELOG.md✅在使用gitbisect调试时可跳过不相关提交✅浏览
基于DDD的.NET开发框架ABP实例,多租户 (Saas)应用程序,采用.NET MVC, Angularjs, EntityFrame-EventCloud...
weixin_30551947
活动云项目在本文中,我们将展示本项目的关键部分并且给予注释信息和说明。建议从网站模板中输入“EventCloud”,下载并且使用VistualStudio2013+的版本打开。我将遵循一些DDD(领域驱动设计)的技术来进行创建领域层和应用层。EventCloud是一个免费的SaaS(多租户)应用程序。我们可以创建一个拥有自己的活动,用户,角色,租户,版本,创建、取消和参与活动的一些简单的业务规则。
2024年Python最全使用爬虫技术实现 Web 页面资源可用性检测_系统可用性爬虫
2401_84692141
程序员 python 爬虫 前端
在早些年,基本上绝大多数网站都是通过后端渲染的,即在服务器端组装形成完整的HTML页面,然后再将完整页面返回给前端进行展现。而近年来,随着AJAX技术的不断普及,以及AngularJS这类SPA框架的广泛应用,前端渲染的页面越来越多。不知大家有没有听说过,前端渲染相比于后端渲染,是不利于进行SEO的,因为对爬虫不友好。究其原因,就是因为前端渲染的页面是需要在浏览器端执行JavaScript代码(即
Vue常见面试题(持续更新)
Hello-Mr.Wang
vue.js 前端 javascript
Vue面试题1.谈谈你对MVVM开发模式的理解MVVM(Model-View-ViewModel)是一种软件架构设计模式,特别适用于构建现代的用户界面应用程序,尤其是在前端开发领域中广为采用。它起源于微软WPF和Silverlight技术栈,后来在JavaScript世界中的框架如Vue.js、AngularJS/Angular以及React(通过Redux等状态管理库结合使用)得到了广泛应用。组
精通 MEAN: MEAN 堆栈
weixin_33766805
javascript 数据库 json ViewUI
精通MEAN:MEAN堆栈端到端地开发现代的、全堆栈的二十一世纪Web项目Web开发专家ScottDavis将在一个包含6篇文章的文章系列中,使用MongoDB、Express、AngularJS和Node.js构建一个现代的Web应用程序。本文是该文章系列的第一篇文章,其中包含一些演示和示例代码,并对创建一个基础的MEAN应用程序进行了完整介绍。您还将了解Yeoman生成器,您可以使用它快速地轻
vue跨域使用websocket_vue使用websocket问题记录
五犬
最近笔者新参与的一个web项目,拟定采用vue2.0来编写,期间遇到有关使用websocket的问题,记录一下,个中遇到的一些问题和解决方法,分享给有需要的人。首先说一下vue2.0的初学体验,目前感觉上手还是很快的,对比其他框架比如angularjs,react等,的确是轻量级很多,并且确实如作者尤大大所诉,真实体会到了其渐进式前端解决方案的思想,你完全可以根据项目的实际情况,选择性的采用最适合
angular拦截器拦截ajax,angular 用拦截器统一处理http请求和响应 比如加token
景子小姐Yume
想使用angularjs里的htpp向后台发送请求,现在有个用户唯一识别的token想要放到headers里面去,也就是{headres:{'token':1}}index.html里引入以下js:angular.module('app.factorys',[]).factory('httpInterceptor',['$q','$injector','$localStorage',functio
Grafana将弃用AngularJS-我们该如何迁移
东风微鸣
grafana angular.js 前端
AngularJS弃用时间线AngularJS支持已在Grafana9中正式弃用。在2024年5月发布的Grafana11中,所有GrafanaCloud和自托管安装默认关闭该功能。到Grafana12版本时,将完全移除对AngularJS的支持,包括配置参数开关angular_support_enabled。AngularJS插件迁移指南以下是分步迁移方案:检测是否使用AngularJS插件:检
Grafana将弃用AngularJS-我们该如何迁移
AngularJS弃用时间线AngularJS支持已在Grafana9中正式弃用。在2024年5月发布的Grafana11中,所有GrafanaCloud和自托管安装默认关闭该功能。到Grafana12版本时,将完全移除对AngularJS的支持,包括配置参数开关angular_support_enabled。AngularJS插件迁移指南以下是分步迁移方案:检测是否使用AngularJS插件:检
Angularjs Form表单验证机制
大王在路上
angular angularjs表单 Angularjs Form表单验证 angular表单验证机制
个人总结one:一般来讲表单可能遇到的问题1.如何数据绑定2.验证表单3.显示出错信息4.整个form的验证5.避免提交没有验证通过的表单6.防止多次提交two:input表单验证需要的属性*name名字(这里需要注意:不光是input元素需要,最外层的form标签也需要一个name属性)*ng-model绑定的数据*ng-required是否必填(true/false)*ng-minlength
angular实现form验证
weixin_30699235
javascript ViewUI
先上效果页面:https://lpdong.github.io/myForm-1/其中几个知识点1、angularJs提供了几个新的type类型:type="password"type="email"type="number"type="url"2、几个参数含义ng-required//是否必填,true/falseng-minlength//最小长度,数字ng-maxlength//最大长度,数
Vue3 数据流革命:单项数据流与 defineModel 的深度解析
斯~内克
vue知识点 vue.js 前端 javascript
一、Vue数据流演进史:从双向绑定到单向控制1.1数据流模式之争现代前端框架存在两种典型数据流模式:模式类型典型代表核心特征适用场景双向数据流AngularJS数据模型与视图实时同步简单表单场景单向数据流React/Vue数据自上而下流动,事件反向传递复杂应用架构Vue的渐进式设计使其在2.x版本保留了两面性:模板语法层面支持双向绑定(v-model)组件通信层面遵循单向数据流原则1.2Vue2的
angular国际化
微笑小邻居
Java angular angular
随着世界各地Web访问量的增加,作为开发者的我们也在不断让应用国际化、本地化。当用户访问我们的应用时,他应该能够在运行时立即切换语言环境。鉴于我们正在开发的是AngularJS客户端应用,尤其不希望用户必须刷新页面或者访问一个完全不同的URL。当然,AngularJS可以很容易地调整那些国际化读者的本机语言环境,或许通过为不同语言生成不同模板的方式为应用提供服务。然而,这个过程可能会很麻烦,当我们
在Ubuntu上安装MEAN Stack的4个步骤
在Ubuntu上安装MEANStack的4个步骤为:1.安装MEAN;2.安装MongoDB;3.安装NodeJS,Git和NPM;4.安装剩余的依赖项。什么是MEANStack?平均堆栈一直在很大程度上升高为基于稳健的基于JavaScript的开发堆栈。名称的意思是指其组件;MongoDB,ExpressJS,Angularjs和NodeJS。第1步:安装MEAN对于此安装,我们将在本指南中使用
推荐文章:Cosmo——打造灵活高效的单页应用CMS
贾耀斐
推荐文章:Cosmo——打造灵活高效的单页应用CMSCosmoSinglePageAppCMS项目地址:https://gitcode.com/gh_mirrors/cos/Cosmo在快速发展的Web开发领域,寻找一个既强大又灵活的内容管理系统(CMS)成为众多开发者和网站所有者的共同需求。今天,我们为你介绍的正是这样一款利器——Cosmo,它巧妙地结合了前端界的明星框架AngularJS与服务
浅谈Vue组件开发几个原则
Doniet
web前端 vue.js 前端 javascript
江湖传闻随着互联网技术的发展,HTML从最初静态网页,发展到现在各端丰富多彩的应用。当初的江湖霸主jQuery,现在已经偏安一隅。angularJS手持MVC利剑,用其庞大的身躯,在前端江湖那平静的湖面砸出一股巨浪。随后React利用家族优势,扛着MVVM宝剑,也在前端江湖掀起了血雨腥风。之后Vue偷师学艺并融合ES5前辈的绝学,利用MVVM宝剑的优势,很快也打下了一片天地。Vue与Angular
在Ubuntu上安装MEAN Stack的4个步骤
ubuntu
在Ubuntu上安装MEANStack的4个步骤为:1.安装MEAN;2.安装MongoDB;3.安装NodeJS,Git和NPM;4.安装剩余的依赖项。什么是MEANStack?平均堆栈一直在很大程度上升高为基于稳健的基于JavaScript的开发堆栈。名称的意思是指其组件;MongoDB,ExpressJS,Angularjs和NodeJS。第1步:安装MEAN对于此安装,我们将在本指南中使用
在Ubuntu上安装MEAN Stack的4个步骤
ubuntu
在Ubuntu上安装MEANStack的4个步骤为:1.安装MEAN;2.安装MongoDB;3.安装NodeJS,Git和NPM;4.安装剩余的依赖项。什么是MEANStack?平均堆栈一直在很大程度上升高为基于稳健的基于JavaScript的开发堆栈。名称的意思是指其组件;MongoDB,ExpressJS,Angularjs和NodeJS。第1步:安装MEAN对于此安装,我们将在本指南中使用
使用AI python实现将前端angularjs工程转换成vue工程案例
银行金融科技
前端 人工智能 python
以下是一个结合Python和AI技术实现AngularJS到Vue工程迁移的完整案例,包含关键转换策略和代码实现:案例背景目标:将使用AngularJS1.x的电商后台管理系统转换为Vue3工程,主要转换以下部分:模板语法控制器逻辑服务依赖路由配置状态管理原始AngularJS代码片段:javascript//app.jsangular.module('app',['ui.router']).co
在Ubuntu上安装MEAN Stack的4个步骤
Kaede6
技术文章-Linux服务部署 ubuntu linux 运维
在Ubuntu上安装MEANStack的4个步骤为:1.安装MEAN;2.安装MongoDB;3.安装NodeJS,Git和NPM;4.安装剩余的依赖项。什么是MEANStack?平均堆栈一直在很大程度上升高为基于稳健的基于JavaScript的开发堆栈。名称的意思是指其组件;MongoDB,ExpressJS,Angularjs和NodeJS。第1步:安装MEAN对于此安装,我们将在本指南中使用
构建AngularJS动态Web应用的示例教程
你这人真狗
本文还有配套的精品资源,点击获取简介:AngularJS是一个由Google支持的前端JavaScript框架,用于创建动态Web应用程序。本文将通过一个名为“angular-sample-app”的示例应用程序,详细介绍AngularJS的核心特性,包括双向数据绑定、控制器、指令系统、服务与依赖注入、表单处理、路由与导航、模板和局部存储以及其他高级特性。通过这个示例应用的深入剖析,开发者可以学习
业务线接入前端异常监控sentry
weixin_33711647
1.前端异常处理的框架对比是否开源收费语言监控范围sentry是自己搭建服务器(免费)价格英文Angular、AngularJs、Backbone、Ember、JavaScript、React、Vue......fundebug否收费(708一年,本地版:12万一年)中文Angular、AngularJs、Backbone、Ember、JavaScript、React、Vue、微信小程序等等...
AngularJS中文手册前半部分学习
CV战士plus
angular.js angular.js 学习 前端
AngularJS简介AngularJS的中文参考手册AngularJS的使用AngularJS是一个JS框架,通过指令(ng-directives)扩展了HTML,且通过表达式绑定数据到HTML,用于开发单一页面应用程序(SPAs:SinglePageApplications)可以通过script标签添加到网页中(建议把脚本放在元素的底部。这会提高网页加载速度,因为HTML加载不受制于脚本加载。
前端三大主流框架:React、Vue、Angular
m0_54851477
前端 react.js vue.js
文章目录一、React、Vue、Angular简介二、React初始化案例三、Vue初始化案例四、Angular初始化案例五、相关链接一、React、Vue、Angular简介前端三大主流框架分别是Angular、React和Vue。以下是这三个框架的详细概述:Angular:Angular原名AngularJS,诞生于2009年,由Google开发并维护。它是一个完整的框架,提供了数据绑定、组件
(二)用控制器controller给模型数据赋初始值
diandingyin9417
javascript ViewUI
之前博客,非常easy的就实现了模型数据和页面显示的自己主动绑定。如今我们使用控制器,给模型赋初始值。假设使用jquery来实现变量赋初值,须要在页面载入完毕后运行$("#target").attr("value",selfValue);使用AngularJS代码例如以下:Hello,World!functionWholeController($scope){$scope.yourName="at
AngularJS 模块
lly202406
开发语言
AngularJS模块引言AngularJS是一个用于构建动态网页和单页应用程序的前端JavaScript框架。它提供了丰富的功能,其中模块(Module)是AngularJS架构的核心概念之一。本文将详细介绍AngularJS模块的概念、作用以及在实际开发中的应用。模块的概念在AngularJS中,模块(Module)是一个全局对象,用于定义应用程序的各个部分。它负责组织应用程序中的各种组件、服
knob UI插件使用
换个号韩国红果果
JavaScript jsonp knob
图形是用canvas绘制的
js代码
var paras = {
max:800,
min:100,
skin:'tron',//button type
thickness:.3,//button width
width:'200',//define canvas width.,canvas height
displayInput:'tr
Android+Jquery Mobile学习系列(5)-SQLite数据库
白糖_
JQuery Mobile
目录导航
SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。
因为Android已经集成了SQLite,所以开发人员无需引入任何JAR包,而且Android也针对SQLite封装了专属的API,调用起来非常快捷方便。
我也是第一次接触S
impala-2.1.2-CDH5.3.2
dayutianfei
impala
最近在整理impala编译的东西,简单记录几个要点:
根据官网的信息(https://github.com/cloudera/Impala/wiki/How-to-build-Impala):
1. 首次编译impala,推荐使用命令:
${IMPALA_HOME}/buildall.sh -skiptests -build_shared_libs -format
2.仅编译BE
${I
求二进制数中1的个数
周凡杨
java 算法 二进制
解法一:
对于一个正整数如果是偶数,该数的二进制数的最后一位是 0 ,反之若是奇数,则该数的二进制数的最后一位是 1 。因此,可以考虑利用位移、判断奇偶来实现。
public int bitCount(int x){
int count = 0;
while(x!=0){
if(x%2!=0){ /
spring中hibernate及事务配置
g21121
Hibernate
hibernate的sessionFactory配置:
<!-- hibernate sessionFactory配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<
log4j.properties 使用
510888780
log4j
log4j.properties 使用
一.参数意义说明
输出级别的种类
ERROR、WARN、INFO、DEBUG
ERROR 为严重错误 主要是程序的错误
WARN 为一般警告,比如session丢失
INFO 为一般要显示的信息,比如登录登出
DEBUG 为程序的调试信息
配置日志信息输出目的地
log4j.appender.appenderName = fully.qua
Spring mvc-jfreeChart柱图(2)
布衣凌宇
jfreechart
上一篇中生成的图是静态的,这篇将按条件进行搜索,并统计成图表,左面为统计图,右面显示搜索出的结果。
第一步:导包
第二步;配置web.xml(上一篇有代码)
建BarRenderer类用于柱子颜色
import java.awt.Color;
import java.awt.Paint;
import org.jfree.chart.renderer.category.BarR
我的spring学习笔记14-容器扩展点之PropertyPlaceholderConfigurer
aijuans
Spring3
PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是BeanFactoryPostProcessor接口的一个实现。关于BeanFactoryPostProcessor和BeanPostProcessor类似。我会在其他地方介绍。
PropertyPlaceholderConfigurer可以将上下文(配置文件)中的属性值放在另一个单独的标准java
maven 之 cobertura 简单使用
antlove
maven test unit cobertura report
1. 创建一个maven项目
2. 创建com.CoberturaStart.java
package com;
public class CoberturaStart {
public void helloEveryone(){
System.out.println("=================================================
程序的执行顺序
百合不是茶
JAVA执行顺序
刚在看java核心技术时发现对java的执行顺序不是很明白了,百度一下也没有找到适合自己的资料,所以就简单的回顾一下吧
代码如下;
经典的程序执行面试题
//关于程序执行的顺序
//例如:
//定义一个基类
public class A(){
public A(
设置session失效的几种方法
bijian1013
web.xml session失效 监听器
在系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session。具体设置很简单,方法有三种:(1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所
java jvm常用命令工具
bijian1013
java jvm
一.概述
程序运行中经常会遇到各种问题,定位问题时通常需要综合各种信息,如系统日志、堆dump文件、线程dump文件、GC日志等。通过虚拟机监控和诊断工具可以帮忙我们快速获取、分析需要的数据,进而提高问题解决速度。 本文将介绍虚拟机常用监控和问题诊断命令工具的使用方法,主要包含以下工具:
&nbs
【Spring框架一】Spring常用注解之Autowired和Resource注解
bit1129
Spring常用注解
Spring自从2.0引入注解的方式取代XML配置的方式来做IOC之后,对Spring一些常用注解的含义行为一直处于比较模糊的状态,写几篇总结下Spring常用的注解。本篇包含的注解有如下几个:
Autowired
Resource
Component
Service
Controller
Transactional
根据它们的功能、目的,可以分为三组,Autow
mysql 操作遇到safe update mode问题
bitray
update
我并不知道出现这个问题的实际原理,只是通过其他朋友的博客,文章得知的一个解决方案,目前先记录一个解决方法,未来要是真了解以后,还会继续补全.
在mysql5中有一个safe update mode,这个模式让sql操作更加安全,据说要求有where条件,防止全表更新操作.如果必须要进行全表操作,我们可以执行
SET
nginx_perl试用
ronin47
nginx_perl试用
因为空闲时间比较多,所以在CPAN上乱翻,看到了nginx_perl这个项目(原名Nginx::Engine),现在托管在github.com上。地址见:https://github.com/zzzcpan/nginx-perl
这个模块的目的,是在nginx内置官方perl模块的基础上,实现一系列异步非阻塞的api。用connector/writer/reader完成类似proxy的功能(这里
java-63-在字符串中删除特定的字符
bylijinnan
java
public class DeleteSpecificChars {
/**
* Q 63 在字符串中删除特定的字符
* 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
* 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
*/
public static voi
EffectiveJava--创建和销毁对象
ccii
创建和销毁对象
本章内容:
1. 考虑用静态工厂方法代替构造器
2. 遇到多个构造器参数时要考虑用构建器(Builder模式)
3. 用私有构造器或者枚举类型强化Singleton属性
4. 通过私有构造器强化不可实例化的能力
5. 避免创建不必要的对象
6. 消除过期的对象引用
7. 避免使用终结方法
1. 考虑用静态工厂方法代替构造器
类可以通过
[宇宙时代]四边形理论与光速飞行
comsci
从四边形理论来推论 为什么光子飞船必须获得星光信号才能够进行光速飞行?
一组星体组成星座 向空间辐射一组由复杂星光信号组成的辐射频带,按照四边形-频率假说 一组频率就代表一个时空的入口
那么这种由星光信号组成的辐射频带就代表由这些星体所控制的时空通道,该时空通道在三维空间的投影是一
ubuntu server下python脚本迁移数据
cywhoyi
python Kettle pymysql cx_Oracle ubuntu server
因为是在Ubuntu下,所以安装python、pip、pymysql等都极其方便,sudo apt-get install pymysql,
但是在安装cx_Oracle(连接oracle的模块)出现许多问题,查阅相关资料,发现这边文章能够帮我解决,希望大家少走点弯路。http://www.tbdazhe.com/archives/602
1.安装python
2.安装pip、pymysql
Ajax正确但是请求不到值解决方案
dashuaifu
Ajax async
Ajax正确但是请求不到值解决方案
解决方案:1 . async: false , 2. 设置延时执行js里的ajax或者延时后台java方法!!!!!!!
例如:
$.ajax({ &
windows安装配置php+memcached
dcj3sjt126com
PHP Install memcache
Windows下Memcached的安装配置方法
1、将第一个包解压放某个盘下面,比如在c:\memcached。
2、在终端(也即cmd命令界面)下输入 'c:\memcached\memcached.exe -d install' 安装。
3、再输入: 'c:\memcached\memcached.exe -d start' 启动。(需要注意的: 以后memcached将作为windo
iOS开发学习路径的一些建议
dcj3sjt126com
ios
iOS论坛里有朋友要求回答帖子,帖子的标题是: 想学IOS开发高阶一点的东西,从何开始,然后我吧啦吧啦回答写了很多。既然敲了那么多字,我就把我写的回复也贴到博客里来分享,希望能对大家有帮助。欢迎大家也到帖子里讨论和分享,地址:http://bbs.csdn.net/topics/390920759
下面是我回复的内容:
结合自己情况聊下iOS学习建议,
Javascript闭包概念
fanfanlovey
JavaScript 闭包
1.参考资料
http://www.jb51.net/article/24101.htm
http://blog.csdn.net/yn49782026/article/details/8549462
2.内容概述
要理解闭包,首先需要理解变量作用域问题
内部函数可以饮用外面全局变量
var n=999;
functio
yum安装mysql5.6
haisheng
mysql
1、安装http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
2、yum install mysql
3、yum install mysql-server
4、vi /etc/my.cnf 添加character_set_server=utf8
po/bo/vo/dao/pojo的详介
IT_zhlp80
java BO VO DAO POJO po
JAVA几种对象的解释
PO:persistant object持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作.
VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可
java设计模式
kerryg
java 设计模式
设计模式的分类:
一、 设计模式总体分为三大类:
1、创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
2、结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
3、行为型模式(11种):策略模式,模版方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者
[1]CXF3.1整合Spring开发webservice——helloworld篇
木头.java
spring webservice CXF
Spring 版本3.2.10
CXF 版本3.1.1
项目采用MAVEN组织依赖jar
我这里是有parent的pom,为了简洁明了,我直接把所有的依赖都列一起了,所以都没version,反正上面已经写了版本
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht
Google 工程师亲授:菜鸟开发者一定要投资的十大目标
qindongliang1922
工作 感悟 人生
身为软件开发者,有什么是一定得投资的? Google 软件工程师 Emanuel Saringan 整理了十项他认为必要的投资,第一项就是身体健康,英文与数学也都是必备能力吗?来看看他怎么说。(以下文字以作者第一人称撰写)) 你的健康 无疑地,软件开发者是世界上最久坐不动的职业之一。 每天连坐八到十六小时,休息时间只有一点点,绝对会让你的鲔鱼肚肆无忌惮的生长。肥胖容易扩大罹患其他疾病的风险,
linux打开最大文件数量1,048,576
tianzhihehe
c linux
File descriptors are represented by the C int type. Not using a special type is often considered odd, but is, historically, the Unix way. Each Linux process has a maximum number of files th
java语言中PO、VO、DAO、BO、POJO几种对象的解释
衞酆夼
java VO BO POJO po
PO:persistant object持久对象
最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
BO:business object业务对象
封装业务逻辑的java对象