我希望這個問題不是太自以爲是因爲我已經看到這麼多類型的問題關閉了。我不在尋找偏好或觀點:我對代碼選擇在加載時間,服務器開銷和其他性質方面扮演的角色沒有多少了解。哪種方法更有效率/合適:使用ng-repeat顯示全部或首先查詢較小的組?
所以我有一個場景,我想與我可以採取的幾條不同的路線分享。我想知道哪種方式在工作量,過載,加載時間等方面效率更高。我不需要有人深入探討其中的任何一個細節:簡而言之,這是最好的解決方案?
我的情況是這樣的:
我會從PHP頁面中檢索到我的AngularJS應用中的JSON對象例如:
{"links":[
{
"Section":"1",
"Title":"Go to abc.html",
"URL":"abc.html",
"GoTo":""
},{
"Section":"2",
"Title":"Go to def.html",
"URL":"def.html",
"GoTo":""
},{
"Section":"1",
"Title":"Go to ghi.html",
"URL":"",
"GoTo":"2"
]};
SOLUTION 1
我使用ng-repeat
顯示這些,使用ng-if
來決定顯示哪個鏈接。例如,當頁面加載時,我們有$scope.currentSection = 1
。接下來在HTML中。
<li ng-repeat="x in links" ng-if="x.Section==currentSection">
<a href="{{x.URL}}" ng-click="changeSection(x.GoTo)" >{{x.Title}}</a>
</li>
因此,這將顯示的任何鏈接中的「第1條」,在這種情況下,我的JSON對象中的第一和第三項。然後,當用戶單擊更改視圖的鏈接時,changeSection
只是更改currentSection
的值,並且視圖會更改。
這個解決方案是完美的:光滑和簡單(我剛剛學會了如何使用ng-if
,所以我個人很驚訝)。
但是,現在讓我們說在對象中有100個或更多項目。根據我讀到的,ng-if
至少將ng-repeat
中所有未使用的項目排除在DOM之外,但它仍然陷入不得不通過尋找「第1部分」的每個項目?
儘管如此,這似乎是比我的下一個解決方案更「角度的方式」來做到這一點。
解決方案2
我可以query
在同一時間只有一個部分。然後在那做一個ng-repeat
。而改變視圖的函數會調用一個PHP
文件,該文件返回包含新節中所有鏈接的新查詢,並可能非常相似地更改視圖。我也會存儲這個查詢的結果,這樣如果再次需要的話,它不需要再次從服務器中檢索:因爲它有可能返回到部分。
因此,我們有的解決方案,在服務器上查詢一次,ng-repeat
使用所有條款顯示,只顯示基於給定ng-if
的項目。或者解決方案,該查詢在用戶導航時進行查詢,不止一次與服務器通信,但不是無限次的。另外,這是假設我們可以在JSON對象中有100個項目。
就我個人而言,我很樂意被告知我可以使用ng-repeat
方法,而不會導致巨大的過載問題。
第一個對我來說似乎很好,但是對於ng來說不是 - 如果我會在ng-repeat上使用過濾器。由於我沒有真正進入表演,這只是一些猜測。 – Okazari
@Okazari我會研究過濾器,我已經用它們來做簡單的事情,但不會想到爲此使用它。我不得不猜測,儘管它會有相同的性能,因爲它仍然需要通過每個項目來查找根據過濾器。這也是我的猜測。謝謝你的反饋! – Christine268