2015-08-19 45 views
0

我正在使用用戶提供的模塊,我試圖不去編輯,以便升級很方便。正確訪問示波器中某個功能的方式

我試圖讓用戶瀏覽本地文件系統上的CSV文件,解析它並將其顯示在動態表中。要做到這一點,我正在利用PapaParse,ui.gridangularFileUpload

我遇到的問題是它們都在層次結構的不同層次上工作。

angularFileUpload很不錯 - 它在我的控制器中調用一個函數(使用controllerAs語法)。該函數然後運行PapaParse函數將CSV文件轉換爲JSON對象(到目前爲止都在工作)。

我的問題是,ui.grid工作在$ scope對象上,因爲它是一個屬性指令,不支持監視器監視變量的變化(您必須調用數據更新的函數來重新綁定數據)。

所以問題是,從我的控制器內什麼是正確/建議方式與外部指令進行通信,而無需編輯指令來收聽消息。

回答

0

ui.grid應該綁定到其關聯數據的變化。因此,您應該只更改您的本地$範圍,網格也綁定到該範圍,並且一切正常。

正如您所提到的,指令不會聽取消息,但這也不是Angular的工作原理。 Angular強制數據綁定,因此,通過將字段綁定到指令中,只要您更改綁定到的模型,組件就應該負責更新其表示。

不幸的是,ui.grid不遵守這個慣例。因此,只要用戶數據存在(在打開文件或通過$watch調用的函數內部),就必須呈現網格。這可以通過例如ngIf來完成,其中僅當字段爲真時加載子指令。當用戶在兩個CSV之間切換時,可以將該值設置爲false,將數據加載到模型中並將其重新設置爲true。確保中間有一個摘要週期(例如,通過$timeout),以便您的更改影響用戶界面。

+0

它似乎沒有聽取更改:\ http://ui-grid.info/docs/#/tutorial/316_dynamic_data_changes –

+0

這很糟糕。也許條件渲染可以幫助你。基本上,如果你選擇另一個CSV文件,你總是需要放棄完整的東西,所以如果你這樣做的話,它不會違背'ui.grid'的思想。 – Darneas

+0

那麼我遇到的問題是如何與控制器中的元素範圍進行通信。 –