关于angularjs的加载方式

一、      关于angularjs的加载方式:

启动方式:

一个angular应用运行起来的“入口”,有两方式:

1)在元素上添加ng-app指令(暂时无需关心什么意思);ng-app可以有属性值(ng-app="app"),这样   的话就需要咱们去写一个名为app的module了,后续详解。

---- 暂时不推荐使用这种方式启动angular

2) 不去指定ng-app,通过JS代码执行:angular.bootstrap(element, [‘模块名‘...]),一样也是可以   启动的

----推荐使用这种方式来启动angular.

二:Bootstrap:Angular的初始化

1:Angular自动化初始如下

利用ngapp标示你需要自动引导应用程序的根节点,一般典型为html tag。在DOMContentLoaded事件触发Angular会自动寻找ngapp作为应用的根节点,如果找到则会进行如下操作:

  1. 加载module(模块)相关directive(指令)。
  2. 创建应用程序injector(Angular的注入机制).
  3. 编译处理ng-app作为根节点的指令。这里允许你自定义选择DOM节点作为应用根节点。

2:手动初始化

如果想对对初始化有更多的控制权,可以采用自定义手动引导方法初始化代替angular的自动初始化。比如你需要在angular编译模板之前做一些事情,比如改变模板某些内容。手动引导方式将会如下:

<!doctypehtml>

<htmlxmlns:ng="http://angularjs.org">

<body>

Hello {{‘World‘}}!

<scriptsrc="http://code.angularjs.org/angular.js"></script>

<script>

angular.element(document).ready(function() {

angular.bootstrap(document);

});

</script>

</body>

</html>

  • 如何使用angular来开发程序
  • 首先在对应的页面引入:angular-1.2.0.min.js
  • 接着引入sea.js(SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制,如requre和define指令都是seajs中的);
  • 例子如下:

首页:index.html文件

<!DOCTYPE html>

<html>

<head>

<meta content="text/html;charset=utf-8">

<title>Insert title here</title>

<script type="text/javascript"src="angular-pa-1.2.0.min.js"></script>

<script type="text/javascript"src="sea.js"></script>

</head>

<body>

<div ng-controller="HelloController">

<input ng-model="greeting.text">

<p>{{greeting.text}},World</p>

<table ng-show="greeting.aaa">

<tr ng-repeat="item in items">

<td ng-click="apply()">{{$index+1}}</td>

<td ng-click="goEoa()">{{item.name}}</td>

<td>{{item.age}}</td>

</tr>

</table>

</div>

<!—有了define等模块定义规范的实现,我们可以开发出很多模块.但光有一堆模块不管用,我们还得让它们能跑起来,使用seajs.use-->

<!—seajs.use用来在页面中加载模块,通过use方法可以在页面中加载任意模块-->

<script data-language="javascript">

seajs.use(‘./controllers‘);

</script>

</body>

</html>

Controllers.js文件

//使用define来定义模块

define(function(require,exports){

var myAppModel =angular.module(‘myAppModel‘,[]);

//将对应的服务引入进来,并使用define将其定义到‘myAppModel‘model上。

require(‘backwardEoaPageService‘).define(myAppModel);

require(‘./backwardEoaPageDirective.js‘).extend(myAppModel);

myAppModel.controller(‘HelloController‘,function($scope,

backwardEoaPageService){

$scope.greeting={

text:‘Hello‘,

youCheckedit:true,

aaa:true

};

$scope.items=[{name:‘张三1‘,age:‘1‘},

{name:‘张三2‘,age:‘2‘},

{name:‘张三3‘,age:‘3‘},

{name:‘张三4‘,age:‘4‘},

{name:‘张三5‘,age:‘5‘},

{name:‘张三6‘,age:‘6‘}];

$scope.apply=function(){

backwardEoaPageService.apply();

};

$scope.goEoa=function(){

backwardEoaPageService.goEoa();

};

});

//备注:使用angular.bootstrap将model:myAppModel加载到document,就不用在html页面上使用ng-app了

angular.bootstrap(document,[‘myAppModel‘]);

});

backwardEoaPageService.js文件

define(function(require, exports){

//exports对外公布一个入口

exports.define= function(md) {

md.factory(‘backwardEoaPageService‘,[‘$http‘,function($http){

varservice = {

apply: function(backwardCancelPlyDTO,handle){

var url = ‘servlets/servlet/HelloWorldExample‘;

$http({method:‘POST‘,url:

url,data:backwardCancelPlyDTO})

.success(function(data, status,

headers){

handle(data);

});

},

goEoa: function(backwardCancelPlyDTO,handle){

alert("goEoa");

}

};

returnservice;

}]);

};

});

backwardEoaPageDirective.js指令文件

define(function(require, exports){

exports.extend= function(md){

//下面指令的定义中,对应的红色参数要一一对应,否则无法注入对象;

//或者前面可以不要,直接写function中的参数即可

md.directive(‘backwardEoaPage‘,

[‘$http‘,‘backwardEoaPageService‘,function($http,backwardEoaPageService){

return {

restrict: ‘A‘,

templateUrl:‘./backwardEoaPage.html‘,

scope: {

isShow: ‘=‘//这是指令对外暴露的接口,=表示是值传递

},

link:function(scope, element,attrs){

scope.model = {

applyReason : null

};

scope.upload = function(){

varbackwardCancelPlyDTO={message:"aaaa"};

backwardEoaPageService.apply(backwardCancelPlyDTO,function(data){

alert(data.message);

});

}

}

};

}]);

};

});

  • angularjs的post请求,springmvc解析不了

.)在angularJS中与远程HTTP服务器交互时会用一个非常关键的服务-$http。

.)$http的使用方式和jquery提供的$.ajax操作比较相同,均支持多种method的请求,get、post、put、delete等。

$http(config).success(function(data,status,headers,config){}).error(function(data,status,headers,config){});

config为一个JSON对象,其中主要包含该请求的url、data、method等,如{url:"login.do",method:"post",data:{name:"12346",pwd:"123"}}

. method  {String} 请求方式e.g."GET"."POST"

. params {key,value} 请求参数,将在URL上被拼接成?key=value

. data {key,value} 数据,将被放入请求内发送至服务器

参考文档:http://www.cnblogs.com/sytsyt/p/3297872.html

  • angularjs的post访问方法:

$http({method: ‘POST‘, url: url, data:backwardCancelPlyDTO})

.success(function(data, status, headers){

handle(data);}

);

对于这样的请求,springmvc的controller如何处理;

a)在对应的入参Bean前面添加@RequestBody注解---因为angularjs post参数值放到请求Body中了,而且入参是对应的json数据,需要进行处理,才能封装到Bean中;

@Controller

publicclassTestController {

@RequestMapping("/test/login.do")

publicvoidtestLogin(@RequestBody User user, HttpServletResponse response) {

response.setContentType("application/json;charset=utf-8");

PrintWriter out = response.getWriter();

if("admin".equals(user.getUserName())&& "admin".equals(user.getPassWord())){

out.write("{\"message\":\"登陆成功\"}");

} else {

out.write("{\"message\":\"登陆失败\"}");

}

}

}

1、必须是POST方式 
2、前台需要设置‘contentType‘ 
3、前台JSON对象要转成字符串,如JSON.stringify(JsonObject), 
4、后台参数得用@RequestBody 注解 
5、如果你是异步处理返回的JSON值(比如Map等)则@ResponseBody是需要的 
6、这个时候,你的JsonObject 就会自动转为queryVO这个Bean

备注:如果使用jquery的ajax进行请求,后台就不需要使用@RequestBody注解进行处理了;---这就是angularjquery的不同;

b)还有就是

angularjs中的post请求参数必须使用data进行传递;不能使用params(供get专用的)

$http({method: ‘POST‘, url: url, data:backwardCancelPlyDTO})

$http({method: ‘GET‘, url: url, params:backwardCancelPlyDTO})

  • springmvc接收json格式的数据在xml配置文件中还需要进行如下的配置

下面的配置是对方法的json数据进行处理;

<beanid="mappingJacksonHttpMessageConverter"

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

<beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<propertyname="messageConverters">

<list>

<reflocal="mappingJacksonHttpMessageConverter"/>

</list>

</property>

</bean>

上面配置需要的jar包在下面下载:

http://jarfiles.pandaidea.com/jackson.all.html

请下载jackson-all-1.8.3.jar,因为1.9.0有问题;

  • springmvc输出json格式的数据,供ajax使用,步骤如下:
  • 在AnnotationMethodHandlerAdapter处理类中需要注入如下的转换器

org.springframework.http.converter.json.MappingJacksonHttpMessageConverter

2)方法的返回值使用如下的注解这样就可以了;

@ResponseBody

@RequestMapping("/test/login.do")

public User testLogin(@RequestBody User user,HttpServletResponse res, HttpServletRequest req) {

时间: 2024-08-10 02:11:07

关于angularjs的加载方式的相关文章

黄聪:AngularJS 动态加载控制器实例-ocLoazLazy

一.AngularJS动态加载控制器和视图实例 路由配置关键代码: [javascript] view plain copy print? //二级页面 $stateProvider.state('main', { url: '/:name', /**如果需要动态加载数据和控制器***/ views: { "": { templateUrl: function ($stateParams) { console.info($stateParams); return '/template/

三种加载方式

重点总结:    即:三种加载方式    1>传统加载方式------默认路径:tomcat/bin/目录    2>使用ServletContext对象-----默认路径:web应用(工程)目录    3>使用类加载器------默认路径:WEB-INF/classes/目录 一.利用ServletContext对象读取资源文件--默认目录为:工程(应用)路径                重点方法:                        InputStream getReso

iOS 正确选择图片加载方式

正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png"]; //方法2 UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]]; //方法3 NSData

浅谈Entity Framework中的数据加载方式

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx,其中的一系列文

sql*loader的直接加载方式和传统加载方式的性能差异

1.确认数据库版本 2.数据准备 3.创建导入表及控制文件 4.直接加载方式演示 查看具体的日志: 5.传统加载方式演示 查看日志文件: 6.结论及两种方式的差异 经过比对direct比conventional要提高了10倍效率. 对比这两种加载方式的区别: Direct 特点 ü  数据绕过SGA直接写入磁盘的数据文件. ü  数据直接写入高水位线HWM之后的新块,不会扫描HWM之前的空闲块. ü  commit之后移动HWM他人才能看到. ü  不对已用空间进行扫描. ü  使用direct

UIImage的两种加载方式

UIImage的两种加载方式 1.有缓存:读取后放入缓存中下次可直接读取,适用于图片较少且频繁使用. [UIImage imageNamed:@"文件名"]: 在缓存中由系统管理,当收到memoryWarning时会释放这些内存资源. 2.无缓存:用完就释放掉,参数传的是全路径,适用于图片较多较大的情况下. NSString *path = [[NSBundlemainBundle] pathForResource: @"1.png"ofType: nil]; [U

hive--udf函数(开发-4种加载方式)

h2 { color: #fff; background-color: #7CCD7C; padding: 3px; margin: 10px 0px } h3 { color: #fff; background-color: #008eb7; padding: 3px; margin: 10px 0px } UDF函数开发 标准函数(UDF):以一行数据中的一列或者多列数据作为参数然后返回解雇欧式一个值的函数,同样也可以返回一个复杂的对象,例如array,map,struct. 聚合函数(UD

Linux共享库两种加载方式简述

动态库技术通常能减少程序的大小,节省空间,提高效率,具有很高的灵活性,对于升级软件版本也更加容易.与静态库不同,动态库里面的函数不是执行程序本身 的一部分,而是在程序执行时按需载入,其执行代码可以同时在多个程序中共享.由于在编译过程中无法知道动态库函数的地址,所以需要在运行期间查找,这对程 序的性能会有影响. 共享库 对于共享库来讲,它只包括2个段:只读的代码段 和可修改的数据段.堆和栈段,只有进程才有.如果你在共享库的函数里,分配了一块内存,这段内存将被算在调用该函数的进程的堆中.代码段由于其

jqueryDOM加载方式

1.  $(document).ready() 代替javascript中的window.onload方法 $(document).ready(){ //jQuery中代替window.onload的方法 }; 简写形式为: $(function(){ //这个大家应该比较熟悉哈 });$().ready(function(){ //当$()不带参数时,默认参数就是“document”}) 2.$(window).load(function(){}) $(window).load(functio