injector
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的更多相关文章
- angular.js:13920 Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- testServe
angular.js:13920 Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- testSer ...
- AngularJS API之$injector ---- 依赖注入
在AngularJS中也有依赖注入的概念,像spring中的依赖注入,但是又有所不同.Spring中使用构造注入或者设值注入的方式,还需要做一些额外的操作,但是angular中只需要在需要的地方声明一 ...
- AngularJS源码分析之依赖注入$injector
开篇 随着javaEE的spring框架的兴起,依赖注入(IoC)的概念彻底深入人心,它彻底改变了我们的编码模式和思维.在IoC之前,我们在程序中需要创建一个对象很简单也很直接,就是在代码中new O ...
- angular源码阅读,依赖注入的原理:injector,provider,module之间的关系。
最开始使用angular的时候,总是觉得它的依赖注入方式非常神奇. 如果你跳槽的时候对新公司说,我曾经使用过angular,那他们肯定会问你angular的依赖注入原理是什么? 这篇博客其实是angu ...
- 给返回的injector增加了一个invoke方法
我们知道,这里swap只需交换指针指向就可以,所以我们可以写出如下自定义版本的swap函数: 首先,它把一个独立的文件看成一个模块,比如上面的 hello.js 文件,就可以当成一个模块.模块的名称就 ...
- Nutch主要类代码分析之一(Injector)
Injector(org.apache.nutch.crawl.Injector): 输入:种子列表文件所在的目录 输出:crawldb(保存URL以及其相应信息的数据库) 作用:把种子URL注入到c ...
- angular源码分析:injector.js文件分析——angular中的依赖注入式如何实现的(续)
昨天晚上写完angular源码分析:angular中jqLite的实现--你可以丢掉jQuery了,给今天定了一个题angular源码分析:injector.js文件,以及angular的加载流程,但 ...
- AngularJs angular.injector、angular.module
angular.injector 创建一个injector对象, 调用injector对象的方法可用于获取服务以及依赖注入. 格式:angular.injector(modules); modules ...
- (七)理解angular中的module和injector,即依赖注入
(七)理解angular中的module和injector,即依赖注入 时间:2014-10-10 01:16:54 阅读:63060 评论:1 收藏:0 [点 ...
- angularJs $injector
一 angularJS中几种注入方式 Spring中使用构造注入或者设值注入的方式,还需要做一些额外的操作,但是angular中只需要在需要的地方声明一下即可,类似模块的引用,因此十分方便. angu ...
随机推荐
- Qt入门(6)——Qt的界面布局
Qt提供四种布局: VBoxLayout:垂直布局 HBoxLayout:水平布局 GridLayout:二维布局. FormLayout: 窗体布局
- 【转】java byte转long、double、float、int、short,或者long、double、float、int、short转byte
原文网址:http://www.xuebuyuan.com/988752.html java byte与其他数据类型的转换主要用于二进制数据的编码和解码,主要用于网络传输,读写二进制文件,java和c ...
- 如何把SKYPE的发送消息由enter改为ctrl+enter?
如果您的skype是tom-skype3.8正式版.您可以在skype面板中,选择"工具"-"选项"-"会话"-"会话设置&quo ...
- Codeforces 235E Number Challenge
http://codeforces.com/contest/235/problem/E 远距离orz......rng_58 证明可以见这里(可能要FQ才能看到) 还是copy一下证明吧: 记 $$f ...
- VS2010发布、打包安装程序
1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...
- LeetCode-Word LadderII
Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...
- [置顶] 【Git入门之十一】标签管理
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309731 标签是啥?标签就是给某个版本的一个标记. 1.为当前版本创建标 ...
- adjtimex使用
adjtimex使用 今天遇到一个ntp的同步问题.服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大. 服务器上实 ...
- Java中静态数据的初始化顺序
Java的类中的数据成员中包含有静态成员(static)时,静态数据成员的初始化顺序是怎样的呢? [程序实例1] import java.util.*; import java.lang.*; imp ...
- css(二)
重新排传智的首页!头部和左边的部分完成了! <!doctype html> <html lang="en"> <head> <meta c ...