SetTimeout不更新视图

时间:2017-12-14 17:28:31

标签: angular

我的组件有一段代码,例如:

mydataframe.rename(columns = {'old_column_name': 'new_column_name'}, inplace=True)

我的观点有{{test}}问题是视图永远不会变为true,而是保持为false。我读过这可能是与polyfills有关的问题?但它正在为一个不同的项目工作,我没有添加polyfills。

更新:

已修复,这是因为即使值是,视图也没有更新。我相信changedetectref有一些东西,但我决定将我的布尔值转换为Observable并且它有效。感谢。

3 个答案:

答案 0 :(得分:1)

您的问题很可能是代码中的其他地方。您的示例代码 IF 封闭函数是函数()而不是箭头函数。否则,您正在更新其他this。关于何时可以访问this存在混淆,我希望这个例子可以说清楚。箭头函数没有this,但是,箭头函数可以从封闭的函数中访问this



'use strict';

let o = function(){};

o.method = function() {
  let updateView = _=> {
    document.getElementById('app').append(this.test+'\n');
    this.test = "Test didn't work. (most likely unbounded)";
  } 
  this.test = 'Initial value';
  updateView();
  let i = 0;
  setTimeout(() => {
      this.test = 'Arrow function inside function() works';
      updateView()
    }, ++i * 1000);
  setTimeout(function() {
      this.test = 'Unbouned function() inside function() does not work';
      updateView();
    }, ++i * 1000);
  setTimeout(function() {
      this.test = 'Bouned function() inside function() works';
      updateView()
    }.bind(this), ++i * 1000);
}

o.method();

<pre id="app"></pre>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您的代码看起来不错但不确定您的浏览器是否支持箭头功能,请尝试以下操作:

my_data = ["h", "e", 1, ["nested", "list"], {"dictionary":"here"}]

答案 2 :(得分:0)

试试这样:

<强> component.ts

import { Observable } from 'rxjs/Rx';

export class sampleComponent {
    private test: boolean = false;

    constructor() {
        Observable.interval(1000).subscribe((x) => {
            this.test = true;
        });
    }    
}

<强> component.html

<div>{{test}}</div>

demo