2016-01-07 38 views
0

在我的應用程序中,我有一個幻燈片樣式界面。在其中一張幻燈片中,我想有條件地展示某件事物(即if Meteor.user().profile.asdf)。我想通過導航從主頁上的鏈接顯示完全相同的頁面(因此,如果您位於URL /item/123)。我如何在不復制我所有的代碼的情況下做到這一點?更具體地說,在我的路由器,我有:如何在AngularJS中重用通過url和條件語句訪問的內容

.state('item', { 
    url: '/item/:itemId', 
    templateUrl: 'client/templates/itemView.html', 
    controller: 'itemViewCtrl as item', 
    resolve : { 
    liftId : ['$stateParams', function($stateParams){ 
     // console.log($stateParams.liftId); 
     return $stateParams.liftId; 
    }] 
    } 
}) 

在通過我通過item.helper.whatever訪問數據的URL訪問的頁面。有沒有一種快捷方式將此頁面作爲<ng-include src="'client/templates/itemView.html'"></ng-include>或其他內容包含在主頁中?

回答

0

如果兩個組件的templateUrl相同,則角度應自動執行此操作。 Angular使用$templateCacheReference

當angular去獲取你的URL時,它會首先檢查$templateCache,並且會意識到模板來自同一個地方而不是再次獲取靜態內容。相反,它會使用存儲在$templateCache


一你可以通過查看開發者工具的網絡流量驗證這一點。只有一個該網址的請求應該發送。

如果不是,或者您想確保使用相同的確切模板,另一種方法是使用手動將模板添加到緩存。

$templateCache.put('templateId.html', 'This is the content of the template');

然後,而不是使用templateUrlState你會用template

+0

所以我認爲這是不工作,因爲訪問的年齡第一種方式經過'指數/ ItemView控件/ 123',而其他只是通過索引/'。當它通過'index/itemView/123'時,它會從'$ stateParams'中獲取ID並使用它來動態加載數據。另一種方式沒有'$ stateParams',所以它不知道要將哪些數據加載到模板中。 – ahota