2016-02-19 37 views
0

我在建議here的狀態對象中定義頁面標題。AngularJs:將stateParams值附加到狀態對象中的自定義數據

$stateProvider 
    .state('project', { 
    url: '/projects/:origin/:owner/:name', 
    template: '<project></project>', 
    data : { pageTitle: 'Project page title'}, 
    }); 

這樣我就可以訪問它以後是這樣的:

$state.current.data.pageTitle 

現在...我想要做的是,而不是一個固定值PAGETITLE我想訪問一個stateParams。

小心,下面的例子是不工作,這是我喜歡它的工作方式。

$stateProvider 
    .state('project', { 
    url: '/projects/:origin/:owner/:name', 
    template: '<project></project>', 
    data : { pageTitle: $stateParams.name}, 
    }); 

我還可以使用屬性決心

決心是:{title: '工程頁面的標題'},

對於stateParams值我能做到這一點:

resolve:{ 
    pageTitle: ['$stateParams', function($stateParams){ 
     return $stateParams.name; 
    }] 
} 

但是然後console.log($ state.current.resolve.pageTitle);在我的控制器將返回整個功能,而不是結果。

什麼是正確的方法來做到這一點?

UPDATE:

,我沒有提到的事情是,我用ES6 angularJs和我使用一個模塊化的架構。 因此,每個組件都有其自己的範圍。

您可以查看我之前的post,以更好地瞭解我正在使用的模塊化體系結構。

我正在構建抓取父狀態的breadcrumb(使用定義的pageTitle)。 因此,在每個模塊中定義頁面標題名稱是完美的。

所以我可以決定,如果頁面標題將是一個固定值「我的頁面標題」或stateParams值。

也許這是完全錯誤的,這不應該這樣做。讓我知道如果是這樣的話。

+0

可能是你需要調用該功能嗎?像console.log($ state.current.resolve.pageTitle()); –

+0

沒有這不工作:(。 – Brieuc

回答

1

如果你使用像你的例子下決心:

resolve:{ 
    pageTitle: ['$stateParams', function($stateParams){ 
     return $stateParams.name; 
    }] 
} 

你需要注入pageTitle到你的控制器:

angular.module('app').controller('controller', [ 
      'pageTitle', 
    function (pageTitle) { 

    } 
]); 

但我看不出這是從什麼不同注射$stateParams

angular.module('app').controller('controller', [ 
      '$stateParams', 
    function ($stateParams) { 

    } 
]); 
+0

我沒有提到的事情是我使用ES6的angularJs和我使用模塊化的體系結構。因此,每個組件都有自己的範圍。我正在構建一個麪包屑,用於定義父狀態(使用已定義的pageTitle)。爲此,我想避免在我的麪包屑組件中使用這種邏輯。在每個模塊中定義頁面標題名稱是完美的。 – Brieuc

+0

我明白你的觀點,我想你是對的。我檢查了這個似乎正是我需要做的其他職位。我無法設法使它與ES6一起工作,但至少這是一個很好的暗示。 http://stackoverflow.com/questions/21970406/how-to-make-automated-dynamic-breadcrumbs-with-angularjs-angular-ui-router – Brieuc

相關問題