2016-03-14 41 views
0

我想在更改时更新存储在constructor中的数据对象。我怎样才能做到这一点?目前,我有这样的:如何刷新并从构造函数中提取对象

HTML

<dummy> 
     <div ng-repeat="key in $ctrl.data">{{ key }}</div> 
    </dummy> 

JS(ES6):

class Dummy { 
    constructor() { 
     this.data = []; 

     this.runData(); 
    } 

    runData() { 
     const inter = setInterval(() => { 
      this.data.push('item'); 
      console.log(this.data); 
     }, 1000); 

     setTimeout(() => { 
      clearInterval(inter); 
     }, 5000); 
    } 
}; 

app.directive('dummy',() => { 
    return { 
     controller: Dummy, 
     controllerAs: '$ctrl' 
    }; 
}); 

我也试着写一个守望者:

app.directive('dummy',() => { 
    return { 
     controller: Dummy, 
     controllerAs: '$ctrl', 
     link(scope, el, a, ctrl) { 
      scope.$watch(ctrl.data, function (newValue, oldValue) { 
       ctrl.data = ctrl.data; 
      }, true); 
     } 
    }; 
}); 

控制台登录它不错,但 - 作为构造函数在开始运行 - 视图是空的。我能做什么?

+0

您可以尝试对您希望关注的数据使用'watcher',然后在值更改时执行一些任务。 – Jagrut

+0

我试着为它写'$ watch',但我没有成功。我在我的答案中更新了代码。 –

+1

你可以让你的代码变成一个可运行的例子吗?最好用jsfiddle或plunker链接 – wvdz

回答

0

所以我解决了这个问题。 我不知道这是否是最佳行动方案,所以如果您认为不是,请自行编写答案。我以前$interval服务是这样的:

runData() { 
    this.interval(() => { 
     this.data.push(Date.now()); 
    }, 1000, 10); 
} 

通过DI之前将其注入着,当然。

我也有另一次尝试没有额外的服务。我用JS的setInterval()这样的:

runData() { 
    setInterval(() => { this.data.push(Date.now()); this.scope.$apply; }, 1000); 
} 

但在这里我不得不使用scope.$apply excplicitly。

我认为第一个例子更好(更干净),但都起作用。

+0

对于setInterval使用angular的包装器函数是此处的首选方法。 – badsyntax

相关问题