2014-02-14 56 views
0

AngularJS有可能避免再次渲染視圖嗎?AngularJS - 我怎樣才能停止再次渲染模板?

我有一個頁面,它從數據庫查詢數據並將其顯示到視圖中,但是當我導航到另一個頁面時,然後再次導航回來。它再次呈現視圖。

在AngularJS中它可能會保留渲染視圖嗎?我不想再查詢數據並重新渲染視圖。我想立即顯示渲染視圖而不再查詢數據。

回答

2

如果您將數據保存或緩存在服務中,則可以避免每次查詢服務器。承諾是做這件事的好方法。請看下面的例子,它使用由$http返回的承諾(但你可以很容易地$q創建自己的承諾):

app.controller('SomeController', function($scope, dataService) { 
    dataService().success(function(data) { 
    $scope.myData = data; 
    }); 
}); 

app.factory('dataService', function($http) { 
    var promise = null; 

    return function() { 
    if (promise) { 
     return promise; 
    } else { 
     promise = $http.get("..."); 
     return promise; 
    } 
    }; 
}); 

由於promise設置你第一次打電話dataService(),以及現有promise返回如果它已經存在,只有第一次打電話給dataService()實際上會進行HTTP通話;其餘的將使用現有值。

+0

感謝您的快速回復布蘭登。 :)這是一個很好的解決方案,但它再次呈現視圖或HTML?假設,我們有200個項目,我們將使用ng-repeat顯示它。當我們再次訪問該頁面時,它會再次運行ng-repeat嗎?或者,angular會給我們以前的html視圖,而不會再次運行ng-repeat。 –

+1

是的,它會重新渲染視圖。如果您的視圖基於'ngRoute',我不確定是否有任何方法來防止這種情況。如果你正在管理你自己的視圖,你可能會使用'ngShow' /'ngHide',但請記住,當你的視圖被加載時,你的示波器觀察者將會被觸發。 –

+0

是啊!我同意......我認爲這就是爲什麼angular會因爲這些觀察者而無法馬上顯示html視圖的原因。再次感謝布蘭登。 –