angularjs中的重定向问题

时间:2013-12-06 12:22:31

标签: javascript angularjs

嗨,我是棱角分明的新手..

我在尝试实施电视指南网站时遇到了一些问题。我在application.js文件中实现了promise

这是application.js

的代码
    .when('/programme/:programmename', {                           //Url rewriting 
                templateUrl:"programme/info.html" ,

                resolve: {
                    programmeid: function (userAPI, $q, $route,$rootScope) {
                        var deferred = $q.defer();

                        var url = $route.current.params.programmename;
                        url = url.replace(/-/g, ' ') ;
                        userAPI.getProgrammeid({ programmename: url }, function (r) {
                            deferred.resolve($rootScope.Programmeid= r.getprogrammeidbyname.programmeidbyname.programmeid);
                            // now promise 
                        });

                        return deferred.promise;
                    }
                }

            })

            .when('/channel/:channelname', {                           //Url rewriting
                templateUrl:"channels/details.html" ,

                resolve: {
                    channelid: function (userAPI, $q, $route,$rootScope) {
                        var deferred = $q.defer();

                        var url = $route.current.params.channelname;

                        url = url.replace(/-/g, ' ') ;
                        userAPI.getChannelid({ channelname: url }, function (r) {
                            console.log("this**********************")
                            console.log(r)
                            deferred.resolve($rootScope.Channelid= r.getsinglechannelidbyname.singlechannelidbyname.channelid);
                            // now  promise is resolved,
                        });

                        return deferred.promise;
                    }
                }

            })
 .otherwise({
            redirectTo:'/home'
        });

我正在实施/#!/programme/programmename.

所以我在大多数情况下都获得了例如程序/ The-Big-Bang-Theory

的网址

我得到的问题是程序名称中存在斜线,例如:-Premier League 2013/14它会重定向到主页,或者即使网址中有短划线,例如: - 暴露的真相 - 外星人我得到真相暴露---外星人并且收到错误(没有找到网址)或getprogrammeidbyname=null is not defined

请帮我解决这个问题。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以在路线中使用*进行匹配:

.when('/programme/:programmename*', {

请参阅$routeProvider

的api文档
  

path可以包含以冒号开头并以星号(:name *)结尾的命名组。当路线匹配时,所有字符都急切地存储在给定名称下的$ routeParams中。

答案 1 :(得分:0)

你可以使用encodeURIComponent()对程序名进行编码,然后再传入吗?