angular 提供了一套依赖注入的机制,和后台很像。虽然我不觉得有很重要。

var $injector = angular.injector(["myModule"]);
var serviceInstance = $injector.get("serviceName"); //可以获取到service 

has_service = $injector.has("serviceName");
$injector.invoke(['serviceA', function(serviceA){}]); //我们很多函数都是通过这个方式实现依赖注入和执行的 


        var output = '<div>' +
'<div>' +
'{{name}}' +
'</div>' +
'</div>';
var $injector = angular.injector(["ng"]);
$injector.invoke(["$rootScope", "$compile", function ($rootScope, $compile) {
var scope = $rootScope.$new(); //创建继承scope
scope.name = "933";
var link = $compile(output); //编辑 {{}}也是指令的一种
var node = link(scope); //与scope绑定
$rootScope.$digest(); //渲染
document.body.appendChild(node[0]);
}]);
这是一个手动的解析过程,大致了解一下解析过程.

更新 2015-10-14 
循环依赖 error
app.config(["$httpProvider", function ($httpProvider) {
$httpProvider.interceptors.push(["Account.user", "$injector", function (user, $injector) {
//note : set all ajax request header for premission
return {
request: function (config) {
var accountService = $injector.get("Account.service"); //note : manual inject, prevent 循环依赖
log(accountService);
log("prevent 循环依赖成功");
config.headers = config.headers || {};
if (user.account) config.headers["selectedAccountTypeName"] = accountService.getTypeNameFromOdataTypeName(user.account["@odata.type"]);
if (user.role) config.headers["selectedRoleTypeName"] = accountService.getTypeNameFromOdataTypeName(user.role["@odata.type"]);
return config;
},
};
}]);
}]);
上面的这个例子,假设 Account.user这个service 依赖注入了 $http 那么这里就会报错了. 
推出是因为angular 并不是等到$http service 完成后才去依赖注入 Account.user的。
要解决这个问题我们可以注入 $injector 然后手动调用 $injector.get("Account.user") 来获取service, 当然手动的话自己就要搞清楚顺序啦 ^^

 

injector的更多相关文章

  1. angular.js:13920 Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- testServe

    angular.js:13920 Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- testSer ...

  2. AngularJS API之$injector ---- 依赖注入

    在AngularJS中也有依赖注入的概念,像spring中的依赖注入,但是又有所不同.Spring中使用构造注入或者设值注入的方式,还需要做一些额外的操作,但是angular中只需要在需要的地方声明一 ...

  3. AngularJS源码分析之依赖注入$injector

    开篇 随着javaEE的spring框架的兴起,依赖注入(IoC)的概念彻底深入人心,它彻底改变了我们的编码模式和思维.在IoC之前,我们在程序中需要创建一个对象很简单也很直接,就是在代码中new O ...

  4. angular源码阅读,依赖注入的原理:injector,provider,module之间的关系。

    最开始使用angular的时候,总是觉得它的依赖注入方式非常神奇. 如果你跳槽的时候对新公司说,我曾经使用过angular,那他们肯定会问你angular的依赖注入原理是什么? 这篇博客其实是angu ...

  5. 给返回的injector增加了一个invoke方法

    我们知道,这里swap只需交换指针指向就可以,所以我们可以写出如下自定义版本的swap函数: 首先,它把一个独立的文件看成一个模块,比如上面的 hello.js 文件,就可以当成一个模块.模块的名称就 ...

  6. Nutch主要类代码分析之一(Injector)

    Injector(org.apache.nutch.crawl.Injector): 输入:种子列表文件所在的目录 输出:crawldb(保存URL以及其相应信息的数据库) 作用:把种子URL注入到c ...

  7. angular源码分析:injector.js文件分析——angular中的依赖注入式如何实现的(续)

    昨天晚上写完angular源码分析:angular中jqLite的实现--你可以丢掉jQuery了,给今天定了一个题angular源码分析:injector.js文件,以及angular的加载流程,但 ...

  8. AngularJs angular.injector、angular.module

    angular.injector 创建一个injector对象, 调用injector对象的方法可用于获取服务以及依赖注入. 格式:angular.injector(modules); modules ...

  9. (七)理解angular中的module和injector,即依赖注入

    (七)理解angular中的module和injector,即依赖注入 时间:2014-10-10 01:16:54      阅读:63060      评论:1      收藏:0      [点 ...

  10. angularJs $injector

    一 angularJS中几种注入方式 Spring中使用构造注入或者设值注入的方式,还需要做一些额外的操作,但是angular中只需要在需要的地方声明一下即可,类似模块的引用,因此十分方便. angu ...

随机推荐

  1. Qt入门(6)——Qt的界面布局

    Qt提供四种布局: VBoxLayout:垂直布局 HBoxLayout:水平布局 GridLayout:二维布局. FormLayout: 窗体布局

  2. 【转】java byte转long、double、float、int、short,或者long、double、float、int、short转byte

    原文网址:http://www.xuebuyuan.com/988752.html java byte与其他数据类型的转换主要用于二进制数据的编码和解码,主要用于网络传输,读写二进制文件,java和c ...

  3. 如何把SKYPE的发送消息由enter改为ctrl+enter?

    如果您的skype是tom-skype3.8正式版.您可以在skype面板中,选择"工具"-"选项"-"会话"-"会话设置&quo ...

  4. Codeforces 235E Number Challenge

    http://codeforces.com/contest/235/problem/E 远距离orz......rng_58 证明可以见这里(可能要FQ才能看到) 还是copy一下证明吧: 记 $$f ...

  5. VS2010发布、打包安装程序

    1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...

  6. LeetCode-Word LadderII

    Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...

  7. [置顶] 【Git入门之十一】标签管理

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309731 标签是啥?标签就是给某个版本的一个标记. 1.为当前版本创建标 ...

  8. adjtimex使用

    adjtimex使用 今天遇到一个ntp的同步问题.服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大. 服务器上实 ...

  9. Java中静态数据的初始化顺序

    Java的类中的数据成员中包含有静态成员(static)时,静态数据成员的初始化顺序是怎样的呢? [程序实例1] import java.util.*; import java.lang.*; imp ...

  10. css(二)

    重新排传智的首页!头部和左边的部分完成了! <!doctype html> <html lang="en"> <head> <meta c ...