根据路径参数的角度js动态模板

时间:2015-05-19 09:16:15

标签: javascript angularjs

这是我的路线代码

deptno
comm
...
ename
empno

我要做的是:

.state('app.single', {
    url: "/playlists/:playlistId",
    views: {
        'menuContent': {
            templateUrl: "templates/playlist.html",
            controller: 'PlaylistCtrl'
        }
    }
});

我该怎样做?

3 个答案:

答案 0 :(得分:3)

试试这个

.state('app.single', {
url: "/playlists/:playlistId",
views: {
  'menuContent': {
    templateUrl: function(params) {
       return 'templates/' + params.playlistId + '.html' ;
    }
    controller: 'PlaylistCtrl'
  }
}

答案 1 :(得分:3)

  

这就是你想要的。

views: {
    'menuContent': {
        templateUrl: function($stateParams) {
            return "templates/" + $stateParams.playlistId + ".html";
        },
        controller: 'PlaylistCtrl'
  }
}
  

这是好的做法吗?

答案是否定的。

您正在直接传递路由参数值以生成模板URL但如果用户提供错误的路由参数,这将导致中断应用程序UI。

更好的方法是使用switch case生成模板URL。



     views: {
       'menuContent': {
         templateUrl: function($stateParams) {
           var param = 0;
           switch ($stateParams.playlistId) {
             case 1:
               param = 1;
               break;
             case 2:
               param = 2;
               break;
             default:
               param = 0
           }
           return "templates/" + param + ".html";
         },
         controller: 'PlaylistCtrl'
       }
     }




答案 2 :(得分:1)

您可以使用stateParams

views: {
    'menuContent': {
        // Inject $stateParams to access the playlistId parameter
        templateUrl: ["$stateParams", function ($stateParams) { 
            return "templates/" + $stateParams.playlistId + ".html";
        }],
        controller: 'PlaylistCtrl'
  }
}