AngularJS相对url路由问题
AngularJS relative url routing issue
我让我的后端web框架用以下URL 加载我的AngularJS应用程序
http://localhost/New/Alpha/App
我还设置了它,这样App
之后的任何东西都会加载相同的
http://localhost/New/Alpha/App/home
http://localhost/New/Alpha/App/settings
...
我正试图让我的AngularJS应用程序以这样的方式工作,即它会在App
之后获取URL,并相应地加载控制器/模板。通过,我在AngularJS应用程序中的路由有问题
var main = angular.module("main", ["ui.bootstrap", "ngRoute"]);
main.config(function($routeProvider, $locationProvider) {
$routeProvider
.when("home", {
templateUrl: "assets/tpl/home.html",
controller: "mainController"
})
.otherwise({
redirectTo: "fail"
});
$locationProvider.html5Mode(true);
});
main.controller("mainController", function($scope) {
console.log("home")
});
如果我尝试这个URL
http://localhost/New/Alpha/App/home
它将URL更改为
http://localhost/fail
而不是保持URL原样并加载模板/控制器。然而,如果我更改配置并给它一个完整的相对URL,它确实可以像一样工作
.when("/New/Alpha/App/home", {
templateUrl: "assets/tpl/home.html",
controller: "mainController"
})
我的问题是,在App
-/New/Alpha
之前的URL部分不能硬编码。它可能是/New/Beta
、/New/Gamma
等。
我想做的事情在不硬编码完整的相对URL匹配的情况下是可能的吗?
UPDATE抱歉,忘记了提到App
之前的URL段数可以更改,因为它可能是/New/Beta/App
,也可能是/New/Another/Beta/App
。我不认为像*/App
或/New/*/App
这样的东西代替/New/:placeholder/App
是可能的吗?
这对你有用吗?
var main = angular.module("main", ["ui.bootstrap", "ngRoute"]);
main.config(function($routeProvider, $locationProvider) {
$routeProvider
.when("/New/:greek/App/home", {
templateUrl: "assets/tpl/home.html",
controller: "mainController"
})
.otherwise({
redirectTo: "fail"
});
$locationProvider.html5Mode(true);
});
main.controller("mainController", function($scope) {
console.log("home")
});
然后,您可以在控制器中使用$routeParams.greek
检索希腊语。
这个问题的一般解决方案是让服务器将应用程序URL传递给客户端代码。换句话说,使用服务器端代码在页面上动态地写下以下内容:
var appUrl = '/New/Alpha/App';
然后设置路由提供商变成:
main.config(function($routeProvider, $locationProvider) {
$routeProvider
.when(appUrl + "/home", {
templateUrl: "/assets/tpl/home.html",
controller: "mainController"
})
.otherwise({
redirectTo: appUrl + "/fail"
});
$locationProvider.html5Mode(true);
});
这样,应用程序基础URL的知识就存在于一个地方——服务器端(如果你仔细考虑的话,这是有意义的,因为只有服务器才能真正知道)。
在您的特定情况下,如果应用程序基础URL隐含在URL结构中,则可以计算以下客户端:
var appUrl = window.location.pathname.match(/^'/New'/.*'/App/);
需要工作,但你明白了。然后,您可以完全按照上面的方式设置路由提供程序。
- 无法运行php代码,有角度路由问题
- ember.js:转换到相同的路由会产生堆栈溢出问题
- 控制器操作的路由问题
- 有UI路由问题的角度路由
- 在Node.js中将数据传递到子路由时出现问题
- Angular中的ajax调用和路由问题
- Angular1.3路由的直接URLS问题-即使html5mode为false
- 我在角度指令和角度路由中有一个问题
- 自定义 Mod 文件夹的角度路由问题
- 角度 js 路由提供程序中的问题
- 基于 id 访问 url 时存在角度路由问题
- Router.go 方法使路由页面流星变灰的问题
- Web API 应用程序中 asp.net 路由和路由前缀问题
- 在快递服务器问题中设置“邮政”路由时遇到困难
- 表达 4 + 角度 2 HTML 5 路由问题
- Expressjs 动态路由问题
- ASP.NET MVC 4 路由问题
- 角度JS和动态路由问题
- Slim Framework v3 - PUT 路由的问题
- AngularJS问题:路由后第二页未调用指令