2016-02-04 25 views
4

在一頁上,我根據用戶選擇(過濾器)通過ajax加載內容,以確保在用戶重新加載或登錄頁面時加載的內容保持原位,我將拾取的過濾器放入url查詢字符串。由於我在這個特定頁面上通過ajax加載內容,我不需要在每次用戶選擇新過濾器時重新加載整個頁面,所以我通過以下配置阻止瀏覽器對url更改作出反應:Angularjs:僅對一個控制器使用配置

app.config(['$locationProvider', function($locationProvider) { 
    $locationProvider.html5Mode(true); 
}]); 

但是,這會影響整個應用程序,並阻止所有其他頁面重新加載URL更改,我不想要的行爲。我怎樣才能使這個配置隻影響我的應用程序中的一個特定的控制器?

+4

我相信答案是,你不知道。假設爲這一個配置和控制器創建一個單獨的模塊不會這樣做。也許如果你更新了爲什麼你需要這個控制器的問題,我們可以找到另一種方法來做你正在尋找的東西。 –

+0

@Matthew Green,我根據你的建議更新了我的問題。謝謝。 – qwaz

回答

0

從角對$locationProvider文檔,該行爲的可能原因是由設計:

  • rewriteLinks - {布爾} - (默認:)啓用html5Mode, 啓用/禁用相對鏈接的網址重寫。

如果您的應用程序反應的URL做出改變爲一種REST的API,我會建議使用ngRoute甚至更​​好uiRouter

希望有所幫助。

0

這是一個棘手的情況,你可能不喜歡我的建議;嘿,我甚至不喜歡這個建議,因爲它打破了單頁應用程序的完整性。

但是你可以做的是創建一個單獨的html文件(我們稱之爲pick-filters.html)。在這個新的html文件上,有一個新的ng-app,因此這個特定頁面有一個單獨的app.js文件。在這個新的app.js文件(我們稱之爲pick-filters-app.js)中,您可以使用您在此顯示的app.config片段。這應該解決所有頁面不能重新加載的問題,因爲只有pick-filters.html引用pick-filters-app.js這個配置片段。

1

如果您的目標是防止在查詢字符串更改時重新加載頁面,那麼html5Mode完全是該作業的錯誤工具。你想reloadOnSearch: false它可以在全球應用或單個路線:

$routeProvider 
    .when('/foo', { 
    controller: 'fooCtrl', 
    templateUrl: 'foo.html', 
    reloadOnSearch: false 
    }, 
    ... 
); 

https://docs.angularjs.org/api/ngRoute/provider/$routeProvider

+0

我在我的應用程序中沒有使用角路由,但是如果現在只爲一個特定路由添加它,那麼我將不得不在該路由中使用哈希標籤,這在我的情況中是不受歡迎的。要刪除這個hashtag,我將不得不使用'$ locationProvider.html5Mode(true)'。這是一個很好的信息,我不知道這樣的選擇,現在就會看到它。謝謝。 – qwaz

相關問題