2017-03-07 40 views
0

我有這樣的一個對象:嵌套計算與JavaScript和角(V1)

vm.data = { 
     a : { 
      v : 25 
     }, 
     b : { 
      v : "", 
      c : "f + a" 
     }, 
     c : { 
      v : "", 
      c : "b + a" 
     }, 
     d : { 
      v : "", 
      c : "c + e" 
     }, 
     e : { 
      v : "", 
      c : "a + c" 
     }, 
     f : { 
      v : "", 
      c : "b + c" 
     } 
    }; 

,我想擁有所有這些計算完成的每一次我改變A. 時間,我無法找到一個解決方案來解決這個問題。任何想法? PS:這只是一個簡單的例子,它比上百倍的時間更大更復雜。

+0

爲什麼不使用某些功能或干將? –

+0

你有存儲在哪個地方哪些改變觸發器哪些計算?或者他們在代碼或其他方面進行了編碼? –

+0

@NinaScholz:你能舉一個getter的例子嗎? Gonzalo.-:我已經得到了這個數據的服務,每次我改變其中的一個(在這個例子中只有A),我必須計算所有這些值。 – Ale

回答

2

您可以使用getter method來獲取屬性計算的實際值。

var object = { 
 
     a: 6, 
 
     b: 42, 
 
     get c() { 
 
      return this.a + this.b; 
 
     } 
 
    }; 
 
    
 
console.log(object.c); 
 
object.a = 1000; 
 
console.log(object.c);

var object = { 
 
     a : 25, 
 
     get b() { return this.a * 5; }, 
 
     get c() { return this.b + this.a; }, 
 
     get d() { return this.c + this.a; } 
 
    }; 
 
    
 
console.log(object.d); 
 
object.a = 1000; 
 
console.log(object.d);

+0

這是一個非常好的解決方案,它效果很好......我只是想通過這種方式找到一種方法來改變我的原始對象。最大的問題是我必須使用parseInt來獲取數字,否則它會看到像字符串這樣的值。 謝謝。 PS:其他建議非常受歡迎(我想避免更改原始對象)! – Ale

+0

PSS:它的工作過程是這樣: vm.data = { 一:25, GET B(){ 回報this.a * 5 }, 都會得到C(){ 回報parseInt函數(this.b) + parseInt(this.a) }, get d(){ return parseInt(this.c)+ parseInt(this.a) } }; 但它不起作用,如果在c中,用this.d更改this.b,因爲d是事後計算的(我認爲)...並且我不幸有這種情況。 – Ale

+0

您需要正確的順序並防止循環引用。 –