javascript - Chrome 存储 : Unable to change component state from a callback function

标签 javascript angular typescript google-chrome-extension

我在从异步回调函数切换 Material 设计组件的状态时遇到问题。

HTML 标记

<mat-slide-toggle
      class="example-margin"
      [color]="color"
      [checked]="checked">
</mat-slide-toggle>

不起作用 我确信回调函数会获取它所需的所有内容的上下文,包括“this.checked”变量,但由于某种原因,它不会传播到 Material 设计组件。

checked:boolean;

ngOnInit() {
     chrome.storage.local.get('isActive',  (data) => {
         console.log(data); // {isActive:true}
         console.log(this); //context is visible
         this.checked = data.isActive; //true
         console.log(this.checked); //true
     });
}

有效。 这个回调函数工作正常。

checked:boolean;

ngOnInit() {
    setTimeout(() => {
      this.checked = true;
    }, 5000)
}

注意:渲染肯定存在问题。当我单击某个与此完全无关的按钮时,该组件会正确重新渲染。

最佳答案

我认为你可以做的是检查 data.isActive 是否等于“checked”,如果不等于,则切换组件以使它们保持一致。像这样的事情:

ngOnInit() {
     chrome.storage.local.get('isActive',  (data) => {
         if (data.isActive != checked){
             this.toggle();
         }
     });
}

这应该触发一个更改事件,以便将更改传播到 View 。

关于javascript - Chrome 存储 : Unable to change component state from a callback function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47614279/

相关文章:

sql - 如何在typeorm querybuilder中选择特定列

javascript - 如何在javascript中将两个json数据添加在一起

angular - 如何使用动态加载模块中的组件动态添加路由

typescript - 如何将 webpack 与 typescript 一起使用?

angular - 在基于 session 的 cookie Angular 6 中存储 JWT

angular - 功能模块中未提供注入(inject) token

typescript - (TypeScript) 扩展 KnockoutObservableArray

javascript - 如何替换数组中元素的实例?

javascript - 将 Vue 组件数据绑定(bind)到外部状态

从 Rails Ajax 请求获得响应后,Javascript 重做 html