Angular uiRouter从数据库文档

时间:2016-09-16 18:51:42

标签: javascript angularjs mongodb meteor angular-meteor

我正在尝试在我的角度应用中动态设置页面标题。

我已经让它使用基于状态动态更改的硬编码标题

.state('faq-detail', {
    url: '/faqs/:faqId',
    templateUrl: 'client/faq/faq-detail.view.ng.html',
    controller: 'FaqListCtrl',
    data: {
      title: 'Faq details'
    }
  });

但我希望得到问题标题,并将其作为页面标题。

问题来自mongo数据库,我正在使用角度流星。

.state('faq-detail', {
    url: '/faqs/:faqId',
    templateUrl: 'client/faq/faq-detail.view.ng.html',
    controller: 'FaqListCtrl',
    data: {
      title: Faq.findOne({_id: $stateParams.faqId}).question
    },
    resolve: {
      theFaq: function ($meteor, $stateParams) {
        return $meteor.subscribe('faq').then(function () {
          return Faq.findOne({_id: $stateParams.faqId});
        });
      }
    }

我已经尝试了这一点,但您可能知道,$stateParamsdata.title区域内并非违法。

我试过的另一种方法就是这个:

// ATEMPT TO SET THE TITLE DYNAMICALLY WITH THE QUESTION
$scope.autorun(() => {
  console.log($scope.getReactively('theFaq'));
  if ($scope.theFaq) {
    let faqTitle = $scope.getReactively('theFaq').question;
    // $state.get('faq-detail').data.title = faqTitle;
    $state.current.data.title = faqTitle;
  }
});

但是,在我使用相同的控制器加载另一个视图后,这会设置标题。所以现在我从上次访问的视图中获得了标题而不是当前视图。

问题

如何从angular-meteor中的mongo集合返回的对象键值设置页面标题?

1 个答案:

答案 0 :(得分:0)

对我而言,实现目标的最简洁方法是在控制器中完成。例如:

angular.module('mymodule').controller('FaqListCtrl', function($stateParams, $window){
    let title = Faq.findOne({_id: $stateParams.faqId}).question;
    $window.document.title = title;
})