将依赖的对象注入到当前对象,直接去使用依赖的对象即可。

降低耦合度、提高开发速度。。

文件压缩:
yui-compressor
有两种方案:
①CLI(command line interface)
java -jar **.jar **.js > **.min.js
②webStorm
file->settings->tools-->fileWatchers->点击+ -》选中yui compressor js-->设置program(点击按钮在弹窗中选中C盘根目录下的js文件)

文件压缩的作用:
①删除了注释 ②没用空白字符清除
③简化了变量的名称(混淆)

文件压缩出现了问题:
$scope变成了a。。,ng框架是无法找到被修改名字后的服务,程序就出现了问题。

依赖注入:
①推断式(猜测)
app.controller('',function($scope){})
注入器,是直接根据服务的名称,在服务的注册列表中去查找该名称所对应的服务,找到并实例化提供给我们使用
特点:注入服务的顺序是无所谓的,在压缩混淆时,会出现无法查找服务的16:34 2017/6/7问题

html代码,直接运行会出错,即出现无法查找服务的问题:

<!DOCTYPE html>
<html ng-app="myApp">
<head lang="en">
<meta charset="UTF-8">
<script src="js/angular.js"></script>
<script src="js/demo09.min.js"></script>
<title></title>
</head>
<body> <div ng-controller="myCtrl">
<span>{{count}}</span>
</div> </body>
</html>
js/demo09.min.js 代码:这里进行了混淆压缩,替换了原有的$scope
var app=angular.module("myApp",["ng"]);app.controller("myCtrl",function(a){a.count=100});

未压缩以前:

var app = angular.module('myApp', ['ng']);
app.controller('myCtrl', function ($scope) {
$scope.count = 100;
})

②标记式
可以解决文件压缩后找不到服务的问题
解决方案:给处理函数指定了$inject属性:由依赖的服务名称构成数组
ctrFunc.$inject = ['$scope','$show']

注意事项:在数组中写服务的顺序要与在创建ng对象时对应的方法中服务的顺序是要保持一致

html代码:

<!DOCTYPE html>
<html ng-app="myApp">
<head lang="en">
<meta charset="UTF-8">
<script src="js/angular.js"></script>
<script src="js/demo10.min.js"></script>
<title></title>
</head>
<body>
<div ng-controller="myCtrl">
<button ng-click="handleClick()">
clickMe
</button>
</div> </body>
</html>
js/demo10.min.js 代码:
var app=angular.module("myApp",["ng"]);app.service("$show",function(){this.showAlert=function(){alert("Hello myService")}});var ctrFunc=function(a,b){a.handleClick=function(){b.showAlert()}};ctrFunc.$inject=["$scope","$show"];app.controller("myCtrl",ctrFunc);

③行内式(内联)
允许在创建ng对象指定一个数组作为参数,在数组中写上依赖的服务的名称,数组中最后一个参数必须是该ng对象对应的处理函数

注意事项:顺序

html代码:

<!DOCTYPE html>
<html ng-app="myApp">
<head lang="en">
<meta charset="UTF-8">
<script src="js/angular.js"></script>
<script src="js/demo11.min.js"></script>
<title></title>
</head>
<body>
<div ng-controller="myCtrl"> </div> </body>
</html>
js/demo11.min.js 代码:
var app=angular.module("myApp",["ng"]);app.factory("$Debug",function(){return{debugSwitch:true,log:function(a){if(this.debugSwitch){console.log(a)}}}});app.controller("myCtrl",["$scope","$Debug",function(a,b){b.log("Hello Dependency Injection")}]);

四、注入器
注入器是帮助查找和定位服务

得到注入器:
①直接注入$injector
②通过方法
angular.injector();

注入器常用API:
has('服务名称')
get('服务名称')

<!DOCTYPE html>
<html ng-app="myApp">
<head lang="en">
<meta charset="UTF-8">
<script src="js/angular.js"></script>
<title></title>
</head>
<body>
<div ng-controller="myCtrl"> </div>
<script>
var app = angular.module('myApp', ['ng']);
//通过service方法创建自定义服务
app.service('$test', function () {
this.info = 'it is a test';
}) //得到注入器
var injector = angular.injector(['ng', 'myApp']);
//手工判断该服务是否存在
var result = injector.has('$test')
console.log(result);
//如果存在,得到该服务对象,调用属性或者方法
if (result) {
var testObj = injector.get('$test');
console.log(testObj.info);
} //采用行内式依赖注入
app.controller('myCtrl',
['$scope','$injector' ,
function ($scope,$injector ) {
if($injector.has('$test'))
{
var result = $injector.get('$test').info
console.log("in myCtrl is "+ result)
}
}])
</script>
</body>
</html>

例子:

实现一个自定义计算器服务(加法运算的方法-》有两个参数,将参数求和返回)
采用行内式依赖注入注入上述服务。
在视图中两个input标签,一个求和按钮

结果:

代码:

<!DOCTYPE html>
<html ng-app="myApp">
<head lang="en">
<meta charset="UTF-8">
<script src="js/angular.js"></script>
<title></title>
</head>
<body>
<div ng-controller="myCtrl">
<input type="number" ng-model="num1"/>
<input type="number" ng-model="num2"/>
<br/>
<button ng-click="addResult()">求和</button>
<p>{{'求和结果:'+result}}</p>
</div>
<script>
var app = angular.module('myApp', ['ng']); //创建服务
app.service('$calculator', function () {
this.add = function (num1,num2) {
return (num1+num2);
}
}) //行内式依赖注入
app.controller('myCtrl',
['$scope','$calculator',
function ($scope,$calculator) {
$scope.addResult = function () {
$scope.result = $calculator.add(
$scope.num1,$scope.num2); }
}
])
</script>
</body>
</html>

ng 依赖注入的更多相关文章

  1. ng依赖注入

    依赖注入 1.注入器在组件的构造函数中写服务constructor(private httpreq:HttpService) { } 2.提供器 providers: [HttpService],

  2. angular路由 模块 依赖注入

    1.模块 var helloModule=angular.module('helloAngular',[]); helloModule.controller('helloNgCrtl',['$scop ...

  3. AngularJS学习笔记之依赖注入

    最近在看AngularJS权威指南,由于各种各样的原因(主要是因为我没有money,好讨厌的有木有......),于是我选择了网上下载电子版的(因为它不要钱,哈哈...),字体也蛮清晰的,总体效果还不 ...

  4. 4.了解AngularJS模块和依赖注入

    1.模块和依赖注入概述 1.了解模块 AngularJS模块是一种容器,把代码隔离并组织成简洁,整齐,可复用的块. 模块本身不提供直接的功能:包含其他提供功能的对象的实例:控制器,过滤器,服务,动画 ...

  5. AngularJS——依赖注入

    依赖注入    依赖注入(DI)是一个经典的设计模式, 主要是用来处理组件如何获得依赖的问题.关于DI,推荐阅读Martin Flower的文章(http://martinfowler.com/art ...

  6. AngularJS学习--- AngularJS中XHR(AJAX)和依赖注入(DI) step5

    前言:本文接前一篇文章,主要介绍什么是XHR,AJAX,DI,angularjs中如何使用XHR和DI. 1.切换工具目录 git checkout -f step- #切换分支 npm start ...

  7. angular2 学习笔记 ( DI 依赖注入 )

    refer : http://blog.thoughtram.io/angular/2016/09/15/angular-2-final-is-out.html ( search Dependency ...

  8. (五)Angularjs - 依赖注入

    如何找到API? AngularJS提供了一些功能的封装,但是当你试图通过全局对象angular去 访问这些功能时,却发现与以往遇到的库大不相同. 比如,AngularJS暴露了一个全局对象:angu ...

  9. AngularJs学习笔记6——四大特性之依赖注入

    压缩工具:YUI-compressor 为了优化网页功能,对一些脚本文件进行压缩,比如:删除所有的注释和空格等,简化形参.但是AngularJs模块中可以声明多种组件,如控制器.指令.过滤器.服务等. ...

随机推荐

  1. 发布mvc3 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容

    今天在发布别人提供的MVC3的程序,正常部署后浏览报错,错误内容如图: 根据IIS提供的解决办法,启用目录浏览,刷新页面发现确实不报错了,但页面是以目录显示的,如图 虽然解决了报错问题,但不是正常的效 ...

  2. cdoj1328卿学姐与诡异村庄

    地址:http://acm.uestc.edu.cn/#/problem/show/1328 题目: 卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others)    ...

  3. linux 基础知识总结2

    1. 设定文件text的属性为:文件属主(u) 增加写权限;与文件属主同组用户(g) 增加写权限;其他用户(o) 删除执行权限:chmod ug+w,o-x log2012.log     权限选择参 ...

  4. grid布局笔记

    1.应用 display: grid 的元素.这是所有网格项(Grid Items)的直接父级元素.即容器 2.网格容器(Grid Container)的子元素(直接子元素). 3.注意:在 网格容器 ...

  5. 支持Access的数据库建模工具 EZDML

    支持Access的数据库建模工具 EZDML 下载地址:EZDML v1.5

  6. with as (cte common table expression) 公共表表达式

    SQL中 with as 的用法——使用公用表表达式(CTE)  公用表表达式 (CTE) 可以认为是在单个 SELECT.INSERT.UPDATE.DELETE 或 CREATE VIEW 语句的 ...

  7. c语言URL通过Http下载mp3 格式

    通过http协议下载MP3的关键就是 整块打包,一块一块向文件里面存储.读取的时候用二进制 /***szWebAddr: 页面地址(包含host+addr) szMp3FileName:将要存储文件的 ...

  8. Django---自定义admin组件思维导图

  9. 自学 iOS 开发的一些经验 - 转自无网不剩的博客

    不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃.啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了, ...

  10. redis入门笔记

    redis入门笔记 参考redis实战手册 1. Redis在windows下安装 下载地址:https://github.com/MSOpenTech/redis/tags 安装Redis 1.1. ...