Home Web Front-end JS Tutorial A brief analysis of life cycle and deferred processing in AngularJS_AngularJS

A brief analysis of life cycle and deferred processing in AngularJS_AngularJS

May 16, 2016 pm 03:54 PM
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;
}]);
Copy after login

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);
Copy after login

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;
      };
    };
  }]);
Copy after login

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);
      }
    };
  }]);
Copy after login

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();
    };
  }]);
Copy after login

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]);
Copy after login

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);
Copy after login

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.

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The latest 5 angularjs tutorials in 2022, from entry to mastery The latest 5 angularjs tutorials in 2022, from entry to mastery Jun 15, 2017 pm 05:50 PM

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".

Use PHP and AngularJS to build a responsive website to provide a high-quality user experience Use PHP and AngularJS to build a responsive website to provide a high-quality user experience Jun 27, 2023 pm 07:37 PM

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

Build web applications using PHP and AngularJS Build web applications using PHP and AngularJS May 27, 2023 pm 08:10 PM

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

Build a single-page web application using Flask and AngularJS Build a single-page web application using Flask and AngularJS Jun 17, 2023 am 08:49 AM

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

How to use AngularJS in PHP programming? How to use AngularJS in PHP programming? Jun 12, 2023 am 09:40 AM

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.

Use PHP and AngularJS to develop an online file management platform to facilitate file management Use PHP and AngularJS to develop an online file management platform to facilitate file management Jun 27, 2023 pm 01:34 PM

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,

Introduction to the basics of AngularJS Introduction to the basics of AngularJS Apr 21, 2018 am 10:37 AM

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.

How to use PHP and AngularJS for front-end development How to use PHP and AngularJS for front-end development May 11, 2023 pm 05:18 PM

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

See all articles