2016-11-01 6 views
0

テンプレートのコントローラで状態を変更すると、現在のテンプレートURLにアクセスしようとしています。AngularJS - コントローラからTemplateUrlを取得するには?

ルート:templateURLは、私がいることになるだろうかsrc/pages/mydoc.htmlを返した場合、同様に

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

を:コントローラで

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

、私はtemplateURLが実際に返すものを知りたいですコントローラーからのURL?

コントローラーで$routeまたは$stateにアクセスすることを示唆する多くの回答を見ましたが、まだ取得できません。

答えて

1

あなたはまだこれを試したことがあり、このページの上の例を見つけることができますか?

$ state.current.templateurl

そうでない場合はconsole.log($のstate.current)を行うと、あなたがそこにあなたのデータを見つけることができるかどうかを確認します。答えを

$state.current.templateUrl 
+1

あなたは私がそれを行うことができると正しいです。しかし、templateUrlの関数を設定したので、 '$ state.current.templateUrl'を取得すると文字列の代わりに関数が返されました。それを動作させるためには、 '$ state.current.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

ありがとう:

編集:このようなので、

私はちょうどそれをテストし、それが動作しますが、 'URL' の資本 'U' に注意してください。 DRYの精神でYah、私はその論理を再現することを避け、ちょうどどこかから文字列を引っ張ることを望んでいた。 –

関連する問題