2016-11-01 91 views
0

我試圖訪問當前模板URL,當我改變模板的控制器中的狀態。AngularJS - 如何從控制器獲取TemplateUrl?

的路線:

lrdcom.config(
    function($stateProvider, $urlRouterProvider, $locationProvider, stringUtilsProvider) { 
     $stateProvider 
      .state(
       'docs', 
       { 
        templateUrl: function($stateParams) { 
         return 'src/pages/' + $stateParams.doc + '.html'; 
        }, 
        url: '/docs/:doc' 
       } 
      ); 
    } 
); 

在控制器方面,我想知道是什麼templateURL實際上返回:

pageViewer.controller(
    'pageViewerController', 
    function($scope, $location, $state) { 
     // how to get current url of template? 
    } 
); 

如,如果templateURL返回src/pages/mydoc.html如何將我拿到控制器的網址?

我看過一些SO答案,建議在控制器中訪問$route$state,但我仍然無法得到它。

回答

1

您是否嘗試過這又在上面的例子?

$ state.current.templateurl

否則做的console.log($ state.current),看看是否能找到你的數據在那裏。

編輯:

我只是測試它和它的作品,但要注意在 '網址' 資本 'U',所以像這樣的:

$state.current.templateUrl 
+1

你是對的,我可以做到這一點。但是,我爲templateUrl設置了一個函數,因此獲取'$ state.current.templateUrl'返回的是函數而不是字符串。爲了讓它起作用,我所要做的就是像'$ state.purrent'templateUrl($ stateParams)''那樣傳遞'$ stateParams'。謝謝。 –

1

爲什麼不包括$stateParams作爲控制器的服務並訪問控制器中的doc參數並再次編寫url?

pageViewer.controller('pageViewerController', function($scope, $location, $stateParams) { 
     // how to get current url of template? 
     var url = 'src/pages/' + $stateParams.doc + '.html'; 
    } 
); 

重要$stateParams疑難雜症

在狀態控制器上,$ stateParams對象將只包含已與該國註冊的PARAMS。所以你不會看到其他國家,包括祖先註冊的參數。

$stateProvider.state('contacts.detail', { 
     url: '/contacts/:contactId', 
     controller: function($stateParams){ 
     $stateParams.contactId //*** Exists! ***// 
} 
}).state('contacts.detail.subitem', { 
     url: '/item/:itemId', 
     controller: function($stateParams){ 
     $stateParams.contactId //*** Watch Out! DOESN'T EXIST!! ***// 
     $stateParams.itemId //*** Exists! ***// 
    } 

})

您也可以找到這個頁面URL Routing

+0

謝謝回答。在DRY的精神下,我希望避免重新創建這種邏輯,並從某個地方拉入字符串。 –