Home Web Front-end JS Tutorial Detailed explanation of Subscription and cancellation in Angular4

Detailed explanation of Subscription and cancellation in Angular4

May 24, 2018 pm 02:25 PM
Detailed explanation

This article mainly introduces an in-depth understanding of Angular4 subscription (Subscribe) and cancellation, and introduces the use of subscription and cancellation in detail. It has certain reference value. Interested friends can refer to it. I hope it can help everyone.

Subscribe

Everyone who has written js knows that subscribe can be seen in many places and plays a very important role. Listening to the return of http requests, passing parameters between pages... Speaking of subscriptions, we can't help mentioning Observable, and talking about Observables, we can't help mentioning Subscribable... Wait, it's too far. Back to the topic, subscribe is a function under the Observable class. It can be seen from the Chinese name of Observable: "observable" that the role of Observable is similar to monitoring, but its monitoring is often across pages. For example:

// 父页面
export class SupComponent {
  id: string;
  // 父组件构造器
  constructor(private router: Router) {
    // 设置id
    this.id = 'JvsBRBQHU2BthZQNYrBkVl0Z22zQQIkP';
  }
  // 进入详情页
  detail(id: string) {
    // 携带id跳转至详细页
    this.router.navigate(['sub', id]);
  }
}

// 子页面
export class SubComponent implements OnInit{
  // 子组件构造器
  constructor(private activated: ActivatedRoute) { }
  // 子组件初始化钩子
  ngOnInit(): void {
    // 订阅活动路由
    this.activated.params.subscribe(params => {
      console.info(params['id']);
    });
  }
}
Copy after login

The above describes a simple business code: click an element item in the list page, then jump to the detail page of the element, and get the id of the element in the detail page. At this time, we can see that subscribing to events comes in handy.

Unsubscribe(Unsubscribe)

At this time, I was thinking that in order to avoid memory overflow in JAVA, it is recommended that we close the stream for reading and writing files and make the object empty. Do I need to cancel my subscription? In the official documentation, we see a sentence:

Detailed explanation of Subscription and cancellation in Angular4

That is to say, the component's hook will help us cancel the subscription and does not require us to cancel. Well, whatever you say is what it is. Today (of course today is when I am blogging), I encountered a simple requirement: the user clicks the 'Modify Information' button on the 'User Information' page to jump to the form page for modifying information. Of course, the initial information of the form is the one before the user changes the information. This is no problem. Then, in order to send as few useless requests as possible (users are allowed to submit without changing the data), I judged it in the DoCheck hook. If the data is different before and after, I made the button clickable. The code:

// 修改资料页面
export class ModifyUerInfo implements OnInit, DoCheck {
  // 用户实体
  user: User;
  // 表单组
  form: FormGroup;
  // 声明订阅对象
  subscript: Subscription;
  // 修改资料页构造器
  constructor(private builder: FormBuilder) {
    // 实例化用户实体
    this.user = new User();
    // 实例化订阅对象
    this.subscript = new Subscription();
  }
  // 修改资料页初始化钩子
  ngOnInit(): void {
    // 调用初始化表单函数
    this.initForm();
  }
  // 修改资料检测变动钩子
  ngDoCheck(): void {
    this.subscript = this.form.valueChanges.subscribe(data => {
      // 若表单无改动,data为null
      if (data == null) {
        // 这里要协同html进行不可点击操作,比较简单,就不贴代码了
        return;
      }
      // 让提交按钮可以点击
      console.info(data);
    })
  }
  // 初始化表单方法
  initForm() {  
    // 初始化表单
    this.form = this.builder.group({
      // 声明昵称填写项(假装这里有值)
      nickname: [this.user.username, Validators.required],
      // 声明年龄填写项(假装这里有值)
      age: [this.user.age, Validators.required]
    })
  }
}
Copy after login

Okay After saving the code, when I happily looked at the console results:

Detailed explanation of Subscription and cancellation in Angular4

Each red line represents that I changed the form once. Please look at the picture to find the pattern~ Looking for your sister!

It can be found that when the form is changed n times, n+1 logs will be generated, and they will be n+1 changed form information. Although the official said that there is no need to cancel the subscription, if so many subscription objects are generated quickly on the mobile terminal, it is inevitable that there will be no problems. And as a programmer with ideals and pursuits, he cannot tolerate such imperfect situations. .

So in the callback function, I added:

// 取消订阅
this.subscript.unsubscribe();
Copy after login

Detailed explanation of Subscription and cancellation in Angular4

At this time, restore the ideal state and call it a day!

To be honest, standardized code can not only improve the readability of the code, make the logic clearer, make the goddess admire you, and allow the boss to increase his salary... The most important thing is that it can prevent the program from causing errors. There are many avoidable mistakes that still need to be noted.

Related recommendations:

Detailed explanation of when to unsubscribe in Angular

node.js publish-subscribe mode Method

Detailed explanation of JavaScript publish-subscribe mode usage

The above is the detailed content of Detailed explanation of Subscription and cancellation in Angular4. For more information, please follow other related articles on the PHP Chinese website!

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 Article Tags

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)

Detailed explanation of obtaining administrator rights in Win11 Detailed explanation of obtaining administrator rights in Win11 Mar 08, 2024 pm 03:06 PM

Detailed explanation of obtaining administrator rights in Win11

Detailed explanation of the mode function in C++ Detailed explanation of the mode function in C++ Nov 18, 2023 pm 03:08 PM

Detailed explanation of the mode function in C++

Detailed explanation of remainder function in C++ Detailed explanation of remainder function in C++ Nov 18, 2023 pm 02:41 PM

Detailed explanation of remainder function in C++

Detailed explanation of division operation in Oracle SQL Detailed explanation of division operation in Oracle SQL Mar 10, 2024 am 09:51 AM

Detailed explanation of division operation in Oracle SQL

Detailed explanation of the usage of Vue.nextTick function and its application in asynchronous updates Detailed explanation of the usage of Vue.nextTick function and its application in asynchronous updates Jul 26, 2023 am 08:57 AM

Detailed explanation of the usage of Vue.nextTick function and its application in asynchronous updates

Detailed explanation of php-fpm tuning method Detailed explanation of php-fpm tuning method Jul 08, 2023 pm 04:31 PM

Detailed explanation of php-fpm tuning method

Detailed explanation of the role and usage of PHP modulo operator Detailed explanation of the role and usage of PHP modulo operator Mar 19, 2024 pm 04:33 PM

Detailed explanation of the role and usage of PHP modulo operator

Detailed explanation of the linux system call system() function Detailed explanation of the linux system call system() function Feb 22, 2024 pm 08:21 PM

Detailed explanation of the linux system call system() function

See all articles