


A brief analysis of life cycle and deferred processing in AngularJS_AngularJS
Here, we discuss some commonly used advanced Inversion of Control containers: lazy-loading, lifetime management, and deferred creation/processing resolution).
Lazy-Loading
The so-called lazy loading is to instantiate the object when you need to use it. Many dependency injection systems create components as dependencies from the beginning. But sometimes, you don't want to instantiate these components until you use them in your application. In Angular, a good example is when you set a behavior during configuration, and the behavior references some components that have not been created yet.
Suppose you want to intercept the system’s built-in $log service, so you store it in $rootScope. Of course I don't recommend this, but this example is simpler and more effective. To intercept, you use $provide during configuration and then call the modified method. If you want to reference $rootScope directly at this time, you will get an exception due to circular reference. And the solution is to lazy load $rootScope via $injector .
The following code will only load $rootScope the first time it is used.
$provide.decorator(, [, , ($delegate, $injector) { log = $delegate.log.bind($delegate); $delegate.log = (msg) { rs = $injector.get(); (rs.logs === undefined) { rs.logs = []; } rs.logs.push(msg); log(msg); }; $delegate; }]);
Following calls will get the same singleton $rootScope. Here is a working example. I seem to have heard an (incorrect) statement before (Angular only supports singletons)... Of course it's not true. The methods in $injector are used to manage the life cycle of your components for you.
Life cycle management
The life cycle involves how you manage instances of components. By default, when you inject an Angular dependency, Dependency Injection will create a copy of it for you and reuse it in your application. Most of the time this is exactly what we expect. In some cases, multiple instances of the same component are required. Assume the following counting service:
Counter($log) { $log.log(); } angular.extend(Counter.prototype, { count: 0, increment: () { .count += 1; .count; } }); Counter.$inject = []; app.service(, Counter);
Your application will keep track of different counters. And after you inject the service, you will always get the same counter. Is this a limitation of Angular?
Of course not. Again, you can create a new copy at any time via the $injector service. The following code uses two independent counters:
app.run([, , , (rs, c, i) { rs.count = c.count; rs.update = c.increment; rs.update2 = () { c = i.instantiate(Counter); rs.count2 = c.count; rs.update2 = () { c.increment(); rs.count2 = c.count; }; }; }]);
You can see that the counters are tracked by separate instances, here is a usable example. If you need to generate new instances frequently, you can register the service like this:
app.factory(, [, (i) { { getCounter: () { i.instantiate(Counter); } }; }]);
It’s that simple to generate the required instance, and you can use your factory component instead $injector:
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(); }; }]);
You can check out this full version of the available example. As you can see, it's entirely possible to manage the lifecycle of your components using Angular's built-in dependency injection. What about deferred resolution - for example, there are components you need to bring in after Angular has been configured, and need to be wrapped with their dependencies.
Deferred Resolution
We have introduced a way to lazily handle dependencies in Angular. When you want to wrap something, you can call instantiate of the $injector service, and it can then resolve the dependency by parameter sniffing, which looks like it would be using the static properties of $inject, or it can also do it by inspecting the It is implemented as an array. In other words, the following is a completely valid way of writing:
$injector.instantiate(['dependency', Constructor]);
You can also call methods on decorated arrays. Suppose you have a method that depends on the $log service. You can call it at runtime with deferred processing, like this:
myFunc = [, ($log) { $log.log(); }]; $injector.invoke(myFunc);
You can take a look at this working example (open your console and see what happens after you press the button).
Summary
To sum up, Angular's dependency injection provides many advanced features that you will want and often use in your business application production line. The convenience of factories, services, and providers often leads Angular developers to believe that there is only one option available. The magic lies in the $injector service, which you can use to generate the required singletons, create new components or dynamically reference methods with dependencies.
Finally, note that injections in your client code are available even outside of Angular. Let’s look at an example of calling the $log service through injection, wrapped outside Angular, click here. Why do we need to pass 'ng' into the method's array? It is a core module of Angular and will be added implicitly when you wrap your module, but if your directive generates its own injected instance, you must add it explicitly.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Javascript is a very unique language. It is unique in terms of the organization of the code, the programming paradigm of the code, and the object-oriented theory. The issue of whether Javascript is an object-oriented language that has been debated for a long time has obviously been There is an answer. However, even though Javascript has been dominant for twenty years, if you want to understand popular frameworks such as jQuery, Angularjs, and even React, just watch the "Black Horse Cloud Classroom JavaScript Advanced Framework Design Video Tutorial".

In today's information age, websites have become an important tool for people to obtain information and communicate. A responsive website can adapt to various devices and provide users with a high-quality experience, which has become a hot spot in modern website development. This article will introduce how to use PHP and AngularJS to build a responsive website to provide a high-quality user experience. Introduction to PHP PHP is an open source server-side programming language ideal for web development. PHP has many advantages, such as easy to learn, cross-platform, rich tool library, development efficiency

With the continuous development of the Internet, Web applications have become an important part of enterprise information construction and a necessary means of modernization work. In order to make web applications easy to develop, maintain and expand, developers need to choose a technical framework and programming language that suits their development needs. PHP and AngularJS are two very popular web development technologies. They are server-side and client-side solutions respectively. Their combined use can greatly improve the development efficiency and user experience of web applications. Advantages of PHPPHP

With the rapid development of Web technology, Single Page Web Application (SinglePage Application, SPA) has become an increasingly popular Web application model. Compared with traditional multi-page web applications, the biggest advantage of SPA is that the user experience is smoother, and the computing pressure on the server is also greatly reduced. In this article, we will introduce how to build a simple SPA using Flask and AngularJS. Flask is a lightweight Py

With the popularity of web applications, the front-end framework AngularJS has become increasingly popular. AngularJS is a JavaScript framework developed by Google that helps you build web applications with dynamic web application capabilities. On the other hand, for backend programming, PHP is a very popular programming language. If you are using PHP for server-side programming, then using PHP with AngularJS will bring more dynamic effects to your website.

With the popularity of the Internet, more and more people are using the network to transfer and share files. However, due to various reasons, using traditional methods such as FTP for file management cannot meet the needs of modern users. Therefore, establishing an easy-to-use, efficient, and secure online file management platform has become a trend. The online file management platform introduced in this article is based on PHP and AngularJS. It can easily perform file upload, download, edit, delete and other operations, and provides a series of powerful functions, such as file sharing, search,

The content of this article is about the basic introduction to AngularJS. It has certain reference value. Now I share it with you. Friends in need can refer to it.

With the popularity and development of the Internet, front-end development has become more and more important. As front-end developers, we need to understand and master various development tools and technologies. Among them, PHP and AngularJS are two very useful and popular tools. In this article, we will explain how to use these two tools for front-end development. 1. Introduction to PHP PHP is a popular open source server-side scripting language. It is suitable for web development and can run on web servers and various operating systems. The advantages of PHP are simplicity, speed and convenience
