2016-03-14 85 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

相關問題