AngularJS的生命周期和延迟治疗的分析

AngularJS的生命周期和延迟治疗的分析
在这里,我们将讨论更常用的控制容器反转:延迟加载(延迟加载)、生命周期管理(生命周期管理)和延迟创建处理(延迟创建解析)。
延迟加载(延迟加载)

所谓的延迟加载,当你需要使用一个对象来实例化它。许多依赖注入系统创建组件开始,作为一个可靠的方案。但有时候,你不想实例化这些组件直到你在你的应用程序中使用它们。角是一个很好的例子,你建立了一个行为时,你配置,和行为会涉及到一些组件还没有被创建。

假设你想拦截系统内建的$日志服务,所以你有rootscope.of美元,当然我不推荐这样做,但这是一种简单有效的例子。为了拦截,你用美元在配置和调用提供的修改方法,如果你想把美元rootscope直接在这个时候,你会由于循环引用例外。解决的办法是通过喷油器rootscope美元美元延迟加载。
下面的代码将只加载它时rootscope美元是第一次使用。

provide.decorator美元(,{,}
($委托,注入器){
日志= $(美元delegate.log.bind代表);
delegate.log美元=(MSG){
RS = $()injector.get;
(rs.logs = undefined){
rs.logs = { };
}
Rs.logs.push(MSG);
日志(MSG);
};
为代表;
});
下面的调用都将得到rootscope.here美元同单案就是一个例子。我似乎听到了(错误的)声明之前(角只支持一个单一的情况下),这不是真的,当然,在$注射器的方法用于管理您的组件的生命周期。

生命周期管理

生命周期包括如何管理一个组件的一个实例。默认情况下,当你将一个角的依赖,依赖注入,将帮助您创建一个副本并重新使用它在您的应用程序。在大多数情况下,这确实是我们所期望的。在某些情况下,同一组件的多个实例将被要求假设下面的计算服务:

计数器($ log){
log.log(美元);
}

Angular.extend(counter.prototype,{
计数:0,
增量:(){
计数= 1;
数;
}
});

计数器$注入= {;

app.service(,计数器);
您的应用程序将遵循不同的计数器。当您注入服务时,您得到相同的计数器。这是角的限制吗
当然不是。重复一次,用注入器服务,你可以随时创建一个新的拷贝:

App.run({,}
(RS,c,i){
rs.count = c.count;
rs.update = c.increment;
rs.update2 =(){()
C = i.instantiate(计数器);
rs.count2 = c.count;
rs.update2 =(){()
c.increment();
rs.count2 = c.count;
};
};
});
您可以看到计数器是由一个独立的实例跟踪的,这里是一个示例。如果您需要经常生成新实例,可以注册如下的服务:

app.factory(,{,}
(一){
{
GetCounter:(){
I.instantiate(计数器);
}
};
});
生成一个您需要的实例非常简单,您可以使用工厂组件而不是注入器:

App.run({,}
(RS,cf){
C1 = cf.getcounter(),
C2 = cf.getcounter();
rs.count = c1.count;
rs.update = c1.increment;
rs.count2 = c2.count;
rs.update2 =(){()
rs.count2 = c2.increment();
};
});
您可以查看完整版本的可用示例。正如您所看到的,使用内置的依赖注入角,完全可以管理组件的生命周期。延迟解析是什么例如,在配置了角值后需要引入一些组件,需要用它们的依赖项打包

延迟处理(延迟解析)

我们介绍一种角延迟处理依赖的方法。当你想收拾一些东西,你可以叫$喷油器服务实例化,那么可以通过参数查找解决依赖,看起来像静态属性注入美元,或者你可以检查你的通过数组实现,也就是说,下面是一个完全有效的写作方式:

injector.instantiate美元({ 'dependency,构造函数});
您还可以调用带有装饰数组的方法:

MyFunc = {,($日志){
log.log(美元);
} };
injector.invoke美元(myfunc);
你可以看看这个可用的例子(打开你的控制台,看看按下按钮后会发生什么)。
总结

综上所述,角的依赖注入提供了许多先进的功能,你会想要和经常使用的商业应用生产线,工厂和供应商,服务的便利,使角开发商往往以为只有唯一的选择这里。神奇的是$喷油器的服务,而你可以用来生成所需的单身者,创建新的组件,或动态的参考方法的依赖。

最后一点要注意的是,客户机代码中的注入可以在角外也可以使用。让我们来看一个包在角外的情况,这里是通过注入一个调用日志服务的例子来说明。为什么要在一组方法中放入NG它是角的核心模块。当您打包模块时,它将隐式地添加,但是如果您的指令想要生成自己的实例,则必须显式地添加它。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部