我有多個ngRepeats
生成表內容,取決於用戶希望看到的視圖,使用不同的ngRepeat
來生成表。當用戶切換其視圖,並且從DOM中刪除以下內容之一併添加另一個時,新的ngRepeat
不會引用相同的pagination.filteredData
陣列。AngularJs - 引用多個ngRepeat的相同範圍屬性
示例:Main
是我的控制器,使用controller as
語法。
<tr ng-if="Main.tableConfig.programGranularity == 'overall'" ng-repeat="item in Main.pagination.filteredData = (Main.data.overallData | filterByDateRange | filter: Main.tableConfig.generalSearch | orderBy: ['Date', 'Name']) | startFrom: Main.pagination.startAtIndex | limitTo: Main.pagination.pageSize">
<td ng-repeat="column in Main.tableConfig.columnsConfig | selectColumnsByGranularity: Main.tableConfig.programGranularity">
<span ng-if="!column.isDate" ng-bind="item[column.dataValue] | ifEmpty: 0"></span>
<span ng-if="column.isDate" ng-bind="item[column.dataValue] | date:'MM/dd/yyyy': 'UTC' | ifEmpty: 0"></span>
</td>
</tr>
<tr ng-if="Main.tableConfig.programGranularity == 'team'" ng-repeat="item in Main.pagination.filteredData = (Main.data.teamData | filterByDateRange | filter: Main.tableConfig.generalSearch | orderBy: ['Date', 'Name']) | startFrom: Main.pagination.startAtIndex | limitTo: Main.pagination.pageSize">
<td ng-repeat="column in Main.tableConfig.columnsConfig | selectColumnsByGranularity: Main.tableConfig.programGranularity">
<span ng-if="!column.isDate" ng-bind="item[column.dataValue] | ifEmpty: 0"></span>
<span ng-if="column.isDate" ng-bind="item[column.dataValue] | date:'MM/dd/yyyy': 'UTC' | ifEmpty: 0"></span>
</td>
</tr>
<tr ng-if="Main.tableConfig.programGranularity == 'colleague'" ng-repeat="item in Main.pagination.filteredData = (Main.data.parsedData | filterByDateRange | filter: Main.tableConfig.generalSearch | orderBy: ['Date', 'Name']) | startFrom: Main.pagination.startAtIndex | limitTo: Main.pagination.pageSize">
<td ng-repeat="column in Main.tableConfig.columnsConfig | selectColumnsByGranularity: Main.tableConfig.programGranularity">
<span ng-if="!column.isDate" ng-bind="item[column.dataValue] | ifEmpty: 0"></span>
<span ng-if="column.isDate" ng-bind="item[column.dataValue] | date:'MM/dd/yyyy': 'UTC' | ifEmpty: 0"></span>
</td>
</tr>
我想同樣pagination.filteredData
陣列由每個ngRepeat
指令來設置。但是,只有運行的第一個ngRepeat
會設置該值,而其他ngRepeat
將不會再設置該值。
我試過ngInit
並在其中初始化一個對象pagination
,並引用我的ngRepeat
。我也嘗試使用$parent.pagination.filteredData
。
使用AngularJS V1.5.0
我如何得到這個工作?
與https://stackoverflow.com/questions/38235907/angularjs-service-variable-not-being-set-inside-of-ngrepeat類似,但重寫並有根本性的不同。儘管解決了同樣的問題。
編輯:重構爲利用controller as
語法,問題仍然存在。對我來說,當我切換到不同的ngRepeat時,似乎創建了一個新的數組和引用,而不是覆蓋當前數組值。
我幾乎每天都在角標籤上看到SO這個問題。您需要使用角度的「控制器作爲」語法,這使您可以清楚地瞭解您在視圖中使用的範圍。這裏有一篇我總是鏈接到的精彩文章,對此進行了很好的解釋:https://toddmotto.com/digging-into-angulars-controller-as-syntax/ – mhodges
您是否嘗試過'ng-init =「pagination.startAtIndex = 0 「'? –
您可以在控制器中手動過濾數據,方法是注入'$ filter',將結果設置到您的服務屬性上,然後讓您的ng-repeat重複遍歷預過濾的結果。 – adam0101