Home  >  Article  >  Web Front-end  >  Detailed explanation of Subscription and cancellation in Angular4

Detailed explanation of Subscription and cancellation in Angular4

小云云
小云云Original
2018-05-24 14:25:434440browse

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']);
    });
  }
}

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]
    })
  }
}

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();

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:
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