Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ui路由器中使用别名?_Javascript_Angularjs_Angular Ui Router_Aliases - Fatal编程技术网

Javascript 如何在ui路由器中使用别名?

Javascript 如何在ui路由器中使用别名?,javascript,angularjs,angular-ui-router,aliases,Javascript,Angularjs,Angular Ui Router,Aliases,我使用angular ui在angular js中进行路由。 我有一个类似的url。但我想使用别名和类似的url。在有角度的ui中可能吗 这是我的配置 angular.module('News', ['ui.router']) .config(function ($stateProvider, $urlRouterProvider) { $stateProvider .state('news', { url: "/news", templa

我使用angular ui在angular js中进行路由。 我有一个类似的url。但我想使用别名和类似的url。在有角度的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'
          }
        },
      });
  })

当然有可能。但要实现这一点,您需要以某种方式将
新闻标题
映射到14,我猜这是一个
id
。你可以这样写:

$stateProvider
    .state('news', {
        url: "/news/:news_title",
        templateUrl: 'news.html',
        ...
    })
在这种情况下,您可以像
http://http://servername/#/news/latest_bbc_news
,您可以在控制器中使用
$stateParams

如何将
新闻标题
映射到
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;
        }]
     })
然后,在
新闻服务中
需要实现方法
getByTitle
直接从后端获取新闻标题,或者从后端获取所有新闻并将其缓存在一个变量中,如

var news = [
  {ID: 1, Title : 'A', Content : 'XXXXXXXXXXXXXXXXXXXX',},
  {ID: 2, Title : 'B', Content : 'YYYYYYYYYYYYYYYYYYYY',},
];
您必须编写自己的代码来循环浏览,并按标题查找所需的新闻


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

你能给我你的配置脚本吗?我在我的问题中已经更新了配置。我只是在将新闻标题映射到新闻id时遇到了问题…你能给我一些解决方案吗?你有很多选择,例如,如果你可以直接将:news\u标题发送到你的后端,让后端找到带有:news\u标题的新闻。或者您可以一起获取所有新闻,在控制器中,您可以循环浏览整个新闻数组,并找到标题为:news_的新闻。如果您想通过angular ui方式解决问题,也可以将此逻辑移动到您的angular模型。angular UI是否提供了一些使用别名的功能?我实际上不太明白这个问题,是不是它代替了使用
http://servername/#/news/14
,您想要类似于``的东西吗?你想在url中使用新闻标题而不是id吗?如果是这样的话,它不像alias,angularjs也不会知道如何将新闻标题映射到新闻id,因为ui路由器只是为你设置路由规则,但内容必须由你自己连接和服务。