20angular1简介

概览:三大框架简介
1、AngularJS 诞生于2009年,是一款优秀的前端JS框架。为Google所收购。
2、ReactJS 诞生于2013年,是一款优秀的前端JS框架。源于 Facebook 的内部项目。
3、VueJS 诞生于2014年,是一款优秀的前端JS框架。作者尤雨溪。
另外:向后台发出请求前,有两件事要做(1)提示:确认请求;(2)转圈:等待请求结果

一、angular概述
AngularJS执行流程详解https://www.cnblogs.com/xuan52rock/p/4788727.html
ng (core module) AngularJS的默认模块,包含AngularJS的所有核心组件
(1)全局函数(function) 使用方式为:angular.forEach()。
(2)指令(directive) 使用方式为:A、内建指令ng-click="" B、自建指令app.directive('selfCreate',function(){})。
(3)服务(service) 使用方式为:A、内建服务$http. B、自建服务app.service('selfCreate',function(){})。
(4)过滤器(filter) 使用方式为:{{ totalMoney() | currency:"¥"}}。

二、全局函数
1、angular.copy、angular.extend与angular.merge
(1)angular.copy(source, [destination]);是“深拷贝”。
把source的键值对(或项)克隆到destination中。destination原有的键值对会被复制或覆盖;如果source和destination类型不一致,则会抛出异常。该方法的作用是:复制一个对象或者一个数组;返回值为:复制或更新后的对象。
(2)angular.extend(destination, source);是“浅拷贝”。
把source的键值对克隆到destination中。destination原有的键值对会被复制或覆盖;该方法的作用是:复制source对象中的属性去destination对象中,支持多个source对象;返回值为:复制后的对象;如果你不想改变一个对象,你可以把destination设为空对象{}: var object = angular.extend({}, object1, object2)。返回destination对象的引用。
(3)angular.merge(destination, source);是“深拷贝”。
把source的键值对克隆到destination中。destination原有的键值对会被复制或覆盖;该方法的作用是:合并source对象中的属性去destination对象中,支持多个source对象;返回值为:合并后的对象;如果你不想改变一个对象,你可以把destination设为空对象{}: var object = angular.merge({}, object1, object2)。返回destination对象的引用。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>angular</title>
    <script type="text/javascript" src="https://cdn.bootcss.com/angular.js/1.5.8/angular.js"></script>
</head>
<body>
</body>
</html>
<script>
    var source={a:1,b:2};
    var destination={a:2,b:3,c:3,d:4};
    var last=angular.copy(source);
    console.log(destination);
    console.log(last);

    /*var destination ={a:2,b:3,c:3,d:4};
    var source={a:1,b:2};
    var last=angular.extend(destination,source);
    console.log(destination);
    console.log(last);

    var destination ={a:2,b:3,c:3,d:4};
    var source={a:1,b:2};
    var last=angular.merge(destination,source);
    console.log(destination);
    console.log(last);*/
</script>
2、自定义作用域和自定义HTML的绑定
var myTemplateScope = angular.extend($rootScope.$new(), customMethodObject(里面存放仅供自定义HTML使用的方法));
angular.element('#myTemplate').append($compile(angular.element(customHtml))(myTemplateScope));
如果jQuery不可用,angular.element只能接受HTML字符串或者DOM元素为参数。
3、angular.module('app', [ '', '',''])用来注册和检索模块,其中依赖需要在本模块加载之前由注入器进行预加载。如果传递了二个或更多的参数时,那么就创建一个新模块。如果仅传递一个参数,那么一个现有模块被检索。angular.module('app', [ 'ui.router','common-dir']);<element ng-app="modulename">;如果module的名称和ng-app的属性值相同,那么该模块就是应用模块,其它模块是普通模块。
4、angular.config(function ($urlRouterProvider) { $urlRouterProvider.otherwise('/login');})在模块加载阶段,对模块进行自定义配置
5、angular.run(function ($rootScope) {}):(在模块加载完成后)是应用中最先执行的方法,只会在angular启动的时候运行一次,定义全局的数据或逻辑,对全局作用域起作用,$rootScope上内容在多个控制器之间可以共享。
6、angular.element:
(1)如果jQuery引入了,则angular.element就可以看作是jQuery选择器,选择的对象可以使用jQuery的函数;angular.element("#p");$("#p")。 所有被Angular引用的元素都是jQuery或者jqLite对象,不是原始的DOM元素了。
(2)如果jQuery没引入,则angular.element只能接受HTML字符串或者原始DOM元素为参数,选择的元素只可以调用Angular中的jqLite的函数;angular.element(document.getElementById("p");angular.element(document.createElement("p"))。
三、指令
1、angular自定义指令详解,见《angular1中的directive》https://www.qdfuns.com/article/40901/ff3914413de19107ec095345d0d5c214.html
2、AngularJS的数据绑定:$scope上的变量发生改变时,页面会重新渲染。只有ng-model的属性值是双向绑定,其它变量均为单向绑定。双向绑定ng-model( 绑定HTML表单元素到$scope变量中)的作用过程:以<input type="text" ng-model="name">{{name}}为例:
(1)如果input所在的作用域内已经声明name并给name赋值了,那么ng-model会把该值获取到,并在input里输出。同时{{name}}也会把该值取到页面上。当input里面的值改变时,ng-model把作用域内的name值进行修改,同时{{name}}也会用修改后的name值覆盖原来页面上的name值。
(2)如果input所在的作用域内没有声明name,那么ng-model会在作用域内声明一个name。当input里面输入值后,ng-model会对作用域内的name进行赋值,同时{{name}}也会在页面上输出。
(3)原理:ng-model根据input标签的type属性值的不同,监听用户的输入事件如onchange,onkeyup,onkeydown。
3、ng-bind(数组、三元)、ng-class(数组、对象。没有三元)、ng-style(三元)与ng-src(三元双括号)用法示例
<td ng-bind="['未连接','连接'][li.status]" ></td>
<td ng-bind="interfaceState.eth0==1?'连接':'未连接'"></ td>
<td ng-class="['bg-primary','bg-danger'][li.status]"></td>
<td ng-class="{'bg-primary':li.status===1,'bg-danger':li.status===0,}"></td>
<td ng-style="interfaceState.eth0==1?{ 'color':'black'}:{'color':'red'}">连接正常</ td>;多属性写法:{'color':'red','background':'green'}
<img ng-src="{{ABC==DEF ? path1:path2}}" alt=""/>
<!DOCTYPE html>
<html lang="en" ng-app="appModule">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p hello></p>
<script src="./angular.js"></script>
<script>
    var app = angular.module("appModule", []);
    app.directive("hello", function () {
        return {
            restrict: "EACM", 
            scope:{},
            templateUrl: "./2.html",
            controller:function ($scope) {
                $scope.colorA=$scope.colorA?$scope.colorA:"green";
                $scope.colorB=$scope.colorB?$scope.colorB:"green";
            }
        }
    });
</script>
</body>
</html>
2.html
<div>
    <div ng-style="{'color':colorA}">连接正常</div>
    <div ng-style="{'color':colorB='red'}">连接正常</div>
</div>
4、ng-repeat:用于遍历数组或对象,
$scope.arrayOrObject=["f","a","1",3];
$scope.arrayOrObject={a:1,b:"b",c:"3"};
(1)<tr ng-repeat="(key,value) in arrayOrObject"><td>{{key}}{{value}}</td></tr>,
用这种格式遍历数组,key是每一项的索引,value是每一项的值。
用这种格式遍历对象,key是每一项的属性名,value是每一项的属性值。
(2)<tr ng-repeat="item in arrayOrObject"><td>{{item}}</td></tr>,
用这种格式遍历数组,item是数组中的每一项;
用这种格式遍历对象,item是对象中的每一项的属性值。
5、ng-if、ng-hide、ng-show的用法
(1)ng-if 如果条件为 false时; “移除” HTML 元素。
(2)ng-show 如果条件为 false时; “隐藏” HTML 元素。
(3)ng-hide 如果条件为 true时; “隐藏” HTML 元素。
另外:<span> {{protoNum}} </span>
<img src="" ng-hide="protoNum==undefined? false:protoNum+1"/>
(1)在HTML里,undefined+1的运行结果是字符串“undefined1”,
(2)在js里,undefined+1的运行结果是数字NaN。
6、三种绑定方式的对比:如果没有$sce或$sanitize的辅助,ng-bind-html是不会生效的。
(1)ng-bind-html和注入的第三方模块ngSanitize就行了,不用注入$sanitize服务,$sanitize会自动对html标签进行净化,并会把标签的属性以及绑定在元素上的事件都移除,仅保留了标签和内容。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://cdn.bootcss.com/angular.js/1.5.8/angular.js"></script>
    <script src="https://cdn.bootcss.com/angular-sanitize/1.5.9/angular-sanitize.js"></script>
</head>
<body >
<div ng-app="myApp" ng-controller="myCtrl">
    <p ng-bind-html="myText"></p>
</div>
</body>
</html>
<script>
/*var app = angular.module("myApp", ['']);*/
var app = angular.module("myApp", ['ngSanitize']);
/*js代码里,注入第三方模块ngSanitize就行了,不用注入$sanitize服务,就可以在HTML里使用ng-bind-html了。*/
app.controller("myCtrl", function($scope) {
    $scope.myText = "My name is: <h1 style='color:red'>John Doe</h1>";
});
</script>
(2)ng-bind-html和内置的$sce.trustAsHtml(),它不经过净化,直接将html绑定给元素,保留所有的属性和事件。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://cdn.bootcss.com/angular.js/1.5.8/angular.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtl">
<div ng-bind-html="content">
</div>
</body>
</html>
<script>
    var app = angular.module('myApp', []);
    app.controller('myCtl',function($scope,$sce){
        $scope.temporaryContent="My name is: <h1 style='color:red'>John Doe</h1>";
        $scope.content = $sce.trustAsHtml($scope.temporaryContent);
    });
</script>
(3)ng-bind绑定的值就作为字符串填充到元素里。

四、ng中的五种服务类型.
来源:https://blog.csdn.net/qq_33587050/article/details/52138069
1、constant服务:constant不可以修改,可以注入到config里。
(1)app.constant("name",obj)
(2)name为服务的名字,obj为一个json对象.
(3)constant创建服务返回一个json对象(也就是第二个参数中传入的对象)。
2、value服务:value可以修改,不可以注入到config里。
(1)app.value("name",obj)
(2)name为服务的名字,obj为一个json对象.
(3)value创建服务返回一个json对象(也就是第二个参数中传入的对象)。
3、service服务
(1)app.service("name",constructor)
(2)name为服务的名字,第二个参数是一个构造函数,它的实例是实际被注入的服务。
4、factory服务
(1)app.factory("name",function(){return obj})
(2)name为服务的名字,第二个参数是一个普通函数,函数返回对象obj,obj是实际被注入的服务.
5、provider服务
(1)App.provider("myConfig", function () { this.$get= function () { return lastObj }});
(2)name为服务的名字,第二个参数是一个构造函数,其内要有$get方法,$get方法要返回对象lastObj,lastObj是真正被注入的服务。this.$get中的this不是myConfig,lastObj中的this才是myConfig。
6、装饰服务
(1)app.config(function($provide){ $provide.decorator("name",function($delegate){ return $delegate }) });
(2)同样是通过config,在参数函数中注入$provider服务,$provider服务有个decorator方法,它接受两个参数,第一个参数"name",是要被装饰的服务的名字,第二个参数是一个函数,函数中注入$delegate,$delegate就是被装饰的服务的实例,然后在函数中操作$delegate,就相当于操作了该服务的实例。
(3)示例:
app.config(function ($provide) {//通过config,在参数函数中注入$provider服务
    $provide.decorator('name',function ($delegate) {//$provider服务有个decorator方法,它接受两个参数,
        var fn = $delegate; //先保存以前的$delegate
        $delegate = function () {//在外面套一层函数
            var list = Array.from(arguments);
            list[1] = list[1]+2000;
            fn.apply(null,list);
        };
        return $delegate;//在函数中返回$delegate;
    })
});
7、执行的先后顺序:provider(定义默认)>config(修改默认)>run(最后执行)
(1)config 配置模块。在提供者注册和配置阶段执行。只能注入提供者和常量配置块。在config阶段,注入 provider 的时候需要加上 provider 后缀,可以调用非 $get方法。
(2)run 运行模块。执行后创建了发射器和用于启动应用程序。只能注入运行实例和常量。返回的方法在 run 阶段注入的时候,无需加 provider 后缀,只能调用 $get 返回的方法。
(1)定义服务calc
app.provider('calc',function () {this.currency = '&';console.log(1);});
(2)配置服务calc
app.config(function (calcProvider) { calcProvider.currency = '钱';console.log(2);});
(3)运行服务calc
app.run(function (calc) { console.log(3);});

五、过滤
1.在html中的用法:{{过滤前(表达式)|过滤类型(无引号):过滤条件(有引号)};有email属性, 值不为admin;tr ng-repeat="user in users | filter: {email:'!admin'}" ;
2.在javascript中的用法:
(1)在js中使用,$filter(过滤类型)(被过滤的数据,输出格式);$filter('date')(new Date(), 'yyyy-MM-dd HH:mm');
(2)在HTML中使用,<span ng-repeat="user in userlist | filter:{team:t.id}"></span>
3.过滤类型有:filter、currency、number、date、json、lowercase、uppercase、limitTo、orderBy;
4.filter:用来处理一个数组,然后可以过滤出含有某个子串的元素,作为一个子数组来返回。可以是字符串数组,也可以是对象数组。如果是对象数组,可以匹配属性的值。它接收一个参数,用来定义子串的匹配规则。
$scope.childrenArray = [{name:'kimi',age:3},{name:'cindy',age:4},{name:'anglar',age:4},{name:'shitou',age:6},{name:'tiantian',age:5}];
$scope.func = function(e){return e.age>4;}
{{ childrenArray | filter : 'a' }} //匹配属性值中含有a的
{{ childrenArray | filter : 4 }} //匹配属性值中含有4的
{{ childrenArray | filter : {name : 'i'} }} //参数是对象,匹配name属性中含有i的
{{childrenArray | filter : func }} //参数是函数,指定返回age>4的

附、其它
1、angular1之冒泡
<div onclick="myFunction(event,'event')"></div>
<div ng-click="myFunction($event, myInput.value)"></div>
abc.onclick=function(event){//这里的event是事件参数,一般情况下这里是没有参数的}
2、在Controller中监听$destory事件,这个事件会在页面发生跳转的时候触发。
3、angular父、子作用域间的传值:
(1)angular父作用域向子作用域传值:作用域是一个对象,在父作用域定义一个属性(也可以是函数),将这个属性通过属性传参的方式传给子作用域。在子作用域里,接受并使用这个属性,实现父作用域向子作用域传值!
(2)angular子作用域向父作用域传值:作用域是一个对象,在父作用域定义一个函数,在这个函数的函数体里,将这个函数的参数赋值给父作用域的一个属性;然后通过属性传参的方式把这个函数传给子作用域。在子作用域里,给这个函数传参并执行,实现子作用域向父作用域传值!在angular1.0分页组件里有此应用:A、分页组件向后台发送请求并获取数据;B、向上面的页面传递数据,供其渲染和执行勾选函数。
4、模板不必通过ng-app关联到HTML的标签上,也不必通过angular.bootstrap()关联到HTML的标签上!
5、angular自定义元素的流程:在HTML页中,使用自定义标签并进行属性传值==>在JS文件中定义该自定义元素,通过template定义自定义元素的模板或通过templateUrl导入自定义元素的模板,通过本文件的scope将属性传进来的值再传给模板;
6、that.template_scope = $rootScope.$new();//创建一个新的子作用域。
7、通过$compile服务可以编译html字符串或dom对象或jqLite对象,然后得到一个编译函数,再传入$scope,就会在当前作用域进行编译,返回编译好的jqLite对象,这时就可以直接添加到文档中了(也可以先添加到文档再编译)

附一:
<a class="btn btn-default" href="#/bookDetail/{{book.id}}">//实参
when('/bookDetail/:bookId',{});//形参
var bookId = $routeParams.bookId;//获取实参
附二:$timeout传入的function会更新作用域内的数据绑定,也就是说在function中对$scope的修改会触发更新,而window.setTimeout中对$scope的修改不会触发更新。来源:https://www.cnblogs.com/xiaxianfei/p/5729444.html

附三:$http
1、$http({})
.success(function(){//成功处理})
.error(function(){//错误处理});
2、$http({})
.then(function(){//成功处理},function(){//错误处理});
3、$http({})
.then(function(){//成功处理})
.catch(function(){//错误处理});







原文地址:https://www.cnblogs.com/gushixianqiancheng/p/10965950.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中文文档更容易理解,前提是你的英语基础还可以。英文文档对于知识点讲述简明扼要,通俗易懂,而有些中文文档读起来特别费力,基础差、底子薄的有可能一会就会被绕晕了,最起码英文文档中的代码与中文文档中的代码是一致的,但知识点讲述实在是差距太大。Angular.jshasapowerfuldire
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是一个令人印象深刻的 JavaScript 图表库,建立在 HTML5 Canvas 基础上。目前,它支持6种图表类型(折线图,条形图,雷达图,饼图,柱状图和极地区域区)。而且,这是一个独立的包,不依赖第三方 JavaScript 库,小于 5KB。   其中用到的软件:   Chart.js框架,版本1.0.2,一
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,结局方案为更换jquery、angularjs、IE的版本。 1.首先尝试更换jquery版本为1.7.2 jquery-1.9.1.js-->jquery-1.7.2.js--> jquery2.1.4.js 无效 2.尝试更换IE版本IE8 IE11-
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:http://ngmodules.org/modules/angularjs-dropdown-multiselecthttp://dotansimha.github.io/angularjs-dropdown-multiselect/#/AngularJSDropdownMultiselectThisdire
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目需求,需要在首页搜索框中添加语音输入功能,考虑到科大讯飞语音业务的强大能力,遂决定使用科大讯飞语音输入第三方服务。软件首页截图如下所示: 涉及的源代码如下所示: //语音识别$rootScope.startRecognize = function() {var speech;
Angular数据更新不及时问题探讨前言 在修复控制角标正确变化过程中,发觉前端代码组织层次出现了严重问题。传递和共享数据时自己使用的是rootScope,为此造成了全局变量空间的污染。根据《AngularJs深度剖析与最佳实践》,如果两个控制器的协作存在大量的数据共享和交互可以利用Factory等服务的“单例”特性为它们注入一个共享对象来传递数据。而自己在使用rootScope
HTML:让表单、文本框只读,不可编辑的方法有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使中国">的内容,"中国"两个字不可以修改。实现的方式归纳一下,有如下几种。方法1:onfocus=this.blur()中国"onfocus=this.blur()>方法2:readonly中国"readonly>中国"readonly="tru
在AngularJS应用中实现微信认证授权遇到的坑前言 项目开发过程中,移动端新近增加了一个功能“微信授权登录”,由于自己不是负责移动端开发的,但最后他人负责的部分未达到预期效果。不能准确实现微信授权登录。最后还得靠自己做进一步的优化工作,谁让自己是负责人呢?原来负责人就是负责最后把所有的BUG解决掉。 首先,熟悉一下微信授权部分的源代码,如下所示:
AngularJS实现二维码信息的集成思路需求 实现生成的二维码包含订单详情信息。思路获取的内容数据如下: 现在可以获取到第一级数据,第二级数据data获取不到。利用第一级数据的获取方法获取不到第二级数据。for(i in data){alert(i); //获得属性 if(typeof(data[i]) == "o
Cookie'data'possiblynotsetoroverflowedbecauseitwastoolarge(5287>4096bytes)!故事起源 项目开发过程中遇到以上问题,刚开始以为只是个警告,没太在意。后来发现直接影响到了程序的执行效果。果断寻找解决方法。问题分析 根据Chrome浏览器信息定位,显示以下代码存在错误:
AngularJS控制器controller之间如何通信angular控制器通信的方式有三种:1,利用作用域继承的方式。即子控制器继承父控制器中的内容2,基于事件的方式。即$on,$emit,$boardcast这三种方式3,服务方式。写一个服务的单例然后通过注入来使用利用作用域的继承方式由于作用域的继承是基于js的原型继承方式,所以这里分为两种情况,当作用域上面的值
AngularJS路由问题解决遇到了一个棘手的问题:点击优惠详情时总是跳转到药店详情页面中去。再加一层地址解决了,但是后来发现问题还是来了:Couldnotresolve'yhDtlMaintain/yhdetail'fromstate'yhMaintain'药店详情http://192.168.1.118:8088/lmapp/index.html#/0优惠券详情
书海拾贝之特殊的ng-src和ng-href在说明这两个指令的特殊之前,需要先了解一下ng的启动及执行过程,如下:1)浏览器加载静态HTML文件并解析为DOM;2)浏览器加载angular.js文件;3)angular监听DOMContentLoaded事件,监听到时开始启动;4)angular寻找ng-app指令,确定作用范围;
angularjs实现页面跳转并进行参数传递Angular页面传参有多种办法,我在此列举4种最常见的:1.基于ui-router的页面跳转传参(1)在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的producer页,同时将producerId
AngularJS实现表格数据的编辑,更新和删除效果实现首先,我们先建立一些数据,当然你可以从你任何地方读出你的数据var app = angular.module('plunker', ['ui.bootstrap']);app.controller('MainCtrl', function($scope) { $scope.name = 'World'; $sc
ANGULAR三宗罪之版本陷阱      坑!碰到个大坑,前面由于绑定日期时将angular版本换为angular-1.3.0-beta.1时,后来午睡后,登录系统,发现无论如何都登陆不进去了,经过调试,发现数据视图已经无法实现双向绑定了。自己还以为又碰到了“僵尸程序”了呢,对比药店端的程序发现并没有什么不同之处。后来自己经过一番思索才隐约感觉到是不是angular的版本造成的,将版本换为之前
JS实现分页操作前言 项目开发过程中,进行查询操作时有可能会检索出大量的满足条件的查询结果。在一页中显示全部查询结果会降低用户的体验感,故需要实现分页显示效果。受前面“JS实现时间选择插件”的启发,自己首先需要查看一下HTML5能否实现此效果。 整了半天,不管是用纯CSS3也好,还是用tmpagination.js还是bootstrap组件也好,到最后自己静下心来理
浏览器兼容性解决之道前言 浏览器兼容性一直是前端开发中不得不面对的一个问题。而最突出的就是IE。对绝大多数公司来说,兼容IE6的性价比已经很低,而IE7则几乎已经绝迹。所以,常见的兼容性下限是IE8。这也正是Angular1.2x的兼容性目标,Angular团队声明:Angular的持续集成服务器会在IE8下运行所有的测试。但这些测试不会运行在IE7及以下版本,它们也不会保证An
JS利用正则表达式校验手机号绪 由于项目需求,需要在前端实现手机号码的校验。当然了,对于基本的格式校验应该放在客户端进行,而不需要再将待校验的手机号发送至服务端,在服务端完成校验,然后将校验结果返回给客户端,客户端根据返回的结果再进行进一步的处理。如此反而复杂化了处理过程。 其实,处于安全考虑,应该在服务端进行二次校验。以下为在客户端的JS中校验手机号码格式
基于项目实例解析ng启动加载过程前言 在AngularJS项目开发过程中,自己将遇到的问题进行了整理。回过头来总结一下angular的启动过程。 下面以实际项目为例进行简要讲解。1.载入ng库2.等待,直到DOM树构造完毕。3.发现ng-app,自动进入启动引导阶段。4.根据ng-app名称找到相应的路由。5.加载默认地址。6.Js顺序执行,加载相应模版页sys_tpls/