глобальная переменная не работает в подфункции Angular 7 - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть вопрос, пожалуйста, объясните мне

import { Component, OnInit,ViewChild,ElementRef  } from '@angular/core';
import {Http,Headers} from "@angular/http";
import { Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent, Subscription } from 'rxjs';
import { map, filter, debounceTime, tap, switchAll, count } from 'rxjs/operators';
@Component({
  selector: 'app-content',
  templateUrl: './content.component.html',
  styleUrls: ['./content.component.css']
})
export class ContentComponent implements OnInit {
  constructor(private http:Http) {

   }
   @ViewChild('abcde') abcde: ElementRef;
   private typeTerm = new Subject<string>();
   public result:string="";
}

И переменная вызова функции Результат

fTyping(a){
  this.result="abcd"; //It Working
  if(this.timeout){ clearTimeout(this.timeout);}
  this.timeout = setTimeout(function() {
    this.result="efgh"; //**Not Working**
    const url="http://localhost:81/api/films/GetFilms",body=JSON.stringify({username:"admin",password:"admin",page:1,"search":a,sort:this.txtSort});
    const requestHeader = new Headers({ 'Content-Type': 'application/json' });
    http1.post(url,body,{ headers : requestHeader }).toPromise().then(res=>{
    temp=res.json();
    console.log(res.json().length);
    this.isLoading=false;
    if(res.json().length<10){
      this.isData=false;
    }
    else
      this.isData=true;
    }).catch(x=>{
      this.result=JSON.stringify({Name:"No data",Title:"No Data",Manufacture:"No Data",Country:"No Data"});
      this.isLoading=false;
      this.isData=false;
    });
  },500);
}

Проблема: Почему в функции setTimeout this.result не просыпается.Есть ли способ для его работы в функции setTimeout ?

1 Ответ

0 голосов
/ 02 февраля 2019

фактически setTimeout создает свою область видимости в побочной функции, поэтому она не работает, вы можете сохранить ссылку на нее в другой переменной

var that=this;
this.timeout = setTimeout(function() {
    that.result="efgh"; //use that

  },500);

или использовать функцию стрелки (функция стрелки не создаетсвоя эта сфера)

setTimeout(() => {
 this.result="efgh";
},500)
...