2016-12-06 60 views
0

我已經通讀了很多關於它的文章,但仍然無法確定我的代碼有什麼問題。我有兩個控制器 - 一個收集每人訂單的產品,另一個收集訂購產品的表格。很顯然,我希望他們分享有關訂單/產品的數據。很遺憾,我無法在添加新產品後對訂單表進行更新。角度,控制器之間共享數據並從一個控制器更新它

export class OrderReviewController { 
    ... 
    getProducts =() => { 
     this.orderDataFactory.setOrders(this.orderService.getOrdersPerAppointment()); 
     return this.orderDataFactory.getProducts(); 
    } 
} 

export class ProductController { 
    ... 
    refreshOrdersTable =() => { 
     this.ordersData.setOrders(this.orderService.getOrdersPerAppointment()); 
     this.ordersData.setProducts(undefined); 
    } 
} 

export class OrdersData implements interfaces.IOrdersDataFactory { 
    orders: interfaces.IOrder[]; 
    products: interfaces.ISalesOrderDetail[]; 

    getOrders =() => { 
     return this.orders; 
     } 

    setOrders = (orders: interfaces.IOrder[]) => { 
     this.orders = orders; 
    } 

    getProducts =() => { 
     if (!this.products){ 
     this.products = []; 
     for (var i = 0; i < this.orders.length; i++) { 
      this.products = this.products.concat(this.orders[i].products); 
     } 
     } 
    return this.products; 
    } 

    setProducts = (products:any) => { 
     this.products = products; 
    } 
} 

`<tr ng-repeat="sample in oc.getProducts()"> 
    <td><a href="" ng-dblclick="oc.openOrderPopup(sample.SalesOrderId.Id)">{{product.salesordername}}</a></td> 
             <td><a href="" ng-dblclick="oc.openContactPopup(sample.cdss_contactid.Id)">{{product.customerName}}</a></td> 
             <td>{{product.title}}</td> 
             <td>{{product.subject}}</td> 
             <td>{{product.type}}</td> 
             <td>{{product.sent ? "yes" : "no"}}</td> 
            </tr>` 

不幸的onload我得到:

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!

+0

angularjs不使用打字稿。角2做。但是你的模板看起來像angularjs。你在用哪個? –

+0

我之前使用過打字稿和Angular 1.x,我不認爲打字稿是那裏的問題。我使用Angular 1.5.8 – cAMPy

回答

0

問題駐留在的getProducts()方法在OrdersData類。問題是每次執行該函數時都會創建一個新數組。您不應該每次都重新創建產品數組,而應使用一些更新標準來定義何時創建新數組。

如果orders數組與上次相同,則返回相同的對象。

getProducts =() => { 

    if(!this.products || someUpdateCriteria) { 
     this.products = []; 
     for (var i = 0; i < this.orders.length; i++) { 
      this.products = this.products.concat(this.orders[i].products); 
     } 
    } 

    return this.products; 
} 

請參閱本文的詳細信息:https://docs.angularjs.org/error/ $ rootScope/infdig

+0

嗨,請根據您的建議查看我的更新代碼。我可以看到getProducts在添加新產品後被調用(儘管我知道爲undefined設置this.products有點難看),但這並未反映在orders表中。我仍然不知道這是什麼問題... – cAMPy

+0

你是怎麼調用refreshOrdersTable函數的?您可能需要在更新產品信息以更新您的中繼器後運行scope.apply() – hagner

+0

我剛剛進行了兩次檢查,看起來getProducts在添加產品後未被調用...我感到超級困惑,從未遇到共享問題控制器之間的數據。 – cAMPy

相關問題