【问题标题】:How to use aliases in ui-router?如何在 ui-router 中使用别名?
【发布时间】:2016-07-31 07:31:17
【问题描述】:

我正在使用 Angular ui 在 Angular js 中进行路由。 我有一个类似http://servername/#/news/14 的网址。但我想使用别名并拥有类似http://servername/#/news/news_title 的网址。有没有可能在angular ui中??

这是我的配置

angular.module('News', ['ui.router'])
  .config(function ($stateProvider, $urlRouterProvider) {
    $stateProvider
      .state('news', {
        url: "/news",
        templateUrl: "modules/news/views/news.html",
        controller: 'NewsCtrl'
      })
      .state('news.detail', {
        url: '^/news/:id',
        views: {
          '@': {
            templateUrl: 'modules/news/views/news_detail.html',
            controller: 'NewsDetailCtrl'
          }
        },
      });
  })

【问题讨论】:

  • 你能给你的配置脚本吗?
  • 我已经更新了我的问题中的配置..

标签: javascript angularjs angular-ui-router aliases


【解决方案1】:

当然可以。但要实现它,您需要以某种方式将news_title 映射到我猜是id 的14。你可以这样写:

$stateProvider
    .state('news', {
        url: "/news/:news_title",
        templateUrl: 'news.html',
        ...
    })

在这种情况下,您可以键入http://http://servername/#/news/latest_bbc_news 之类的url,在您的控制器中,您可以使用$stateParams 获取:news_title

如何将news_title 映射到14 取决于您的模型。

更新

例如,您可能可以这样写:

$stateProvider
    .state('news', {
        url: "/news/:news_title",
        templateUrl: 'news.html',
        resolve : {
          news_item: function(NewsService, $stateParams) {
            return NewsService.getByTitle($stateParams.news_title);
          },
        },
        controller:['$scope','$state','news_item',
          function ( $scope , $state , news_item){ 
            $scope.news_item= news_item;
        }]
     })

然后在您的NewsService 中,您需要实现方法getByTitle 以直接从后端按标题获取新闻,或者您从后端获取所有新闻并将其缓存在像

这样的变量中
var news = [
  {ID: 1, Title : 'A', Content : 'XXXXXXXXXXXXXXXXXXXX',},
  {ID: 2, Title : 'B', Content : 'YYYYYYYYYYYYYYYYYYYY',},
];

你必须编写自己的代码来循环遍历它并通过标题找到你需要的新闻。

同样,ui-router 只是为您设置路由规则,提供正确的内容始终是您的责任。我的意思是 ui-router 不知道哪些消息的 id 为 14 和相应的标题,它只能从后端获取并由您处理。

【讨论】:

  • 我只是在将 news_title 映射到新闻 id 时遇到了问题……你能给我一些解决方案吗??
  • 您有很多选择,例如,如果您可以将 :news_title 直接发送到您的后端,并让后端找到带有 :news_title 的新闻。或者你可以一起获取所有新闻,在你的控制器中,你可以遍历整个新闻数组并使用 :news_title 找到新闻。如果需要,您还可以将此逻辑移动到您的角度模型中
  • 我需要通过 angular ui 方式解决。 Angular UI 是否提供了一些使用别名的功能??
  • 我实际上并没有真正得到这个问题,是不是使用http://servername/#/news/14,你想要像`servername/#/news/breaking_news_a_b_c`这样的东西?喜欢在 url 中使用 news_title 而不是使用 id 吗?
  • 如果是这样的话,它就不是别名之类的东西,并且angularjs不会知道如何将news_title映射到news_id,因为ui-router只是为您设置路由规则,但内容必须自己连接和服务。
猜你喜欢
  • 1970-01-01
  • 2019-03-22
  • 2015-01-02
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多