gpt4 book ai didi

angularjs - 将 Angular 路由与往返路由一起使用

转载 作者:行者123 更新时间:2023-12-04 20:10:58 26 4
gpt4 key购买 nike

我正在开发一个 Django 应用程序,它在某些页面中大量使用 Angular,例如在 domain.com/myAngularApp

在 angular 页面中,我使用 Angular 路由在该页面内的不同 View /状态之间导航。然而,在整个网站上都有导航链接需要导致对 Django 的往返请求。然而,所有页面都包含相同的编译 javascript 文件,其中包含 Angular 路由声明。

所以我的问题是:如何让 Angular 管理自己的路线,并在位置更改(主要是通过单击页面上的链接)到未明确告知其拥有的路径时让路,即到域外的不同子目录。

我的路由声明类似于:

myApp.config( function($locationProvider, $routeProvider) {
$locationProvider.html5Mode(true);
$routeProvider.when('/myAngularApp/', {
templateURL: 'template1.html'
});
$routeProvider.when('/myAngularApp/stuff', {
templateURL: 'template12.html'
});
$routeProvider.otherwise({redirectTo: <not sure what to do here...> });
})

我试过这样的事情:
$routeProvider.otherwise({redirectTo: function(a1,r,a3){ window.location.href = r }})

但这会使页面在任何不匹配的路由上无休止地刷新。

省略 else 语句似乎使得在直接访问时无法离开具有不匹配路由的页面......真的不明白为什么?

必须有可能做我想做的事吗?

最佳答案

我想我可能已经找到了解决方案。我正在做类似的事情,一个多页面的 Angular 站点,它的一些页面使用 angular。这是我在做什么

var app = angular.module('appname', ['ui.bootstrap', 'ui.autocomplete'])
.config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');
}])
.run(function($rootScope, $location) {
var redirected = false;
$rootScope.$on('$locationChangeStart', function(event, nextLocation, currentLocation) {
if(!redirected && $location.path() !== '/current-url') {
redirected = true;
event.preventDefault();
window.location = $location.path();
}
});
});

所以接下来我要解决的是如何传入current-url路径。我想的一种方法是让我们 ng-init 在 View 中设置该数据(我使用 express.js 所以我会使用 Jade)。或者可能在 run 函数中获取初始路径并对其进行测试。

event.preventDefault() 用于阻止将额外项目添加到浏览器历史记录中。在我这样做之前,我不得不回击两次才能回到有 Angular 的页面。

备注 这还没有在 IE8 上测试过。我现在要这样做,看看它是如何公平的。

更新 好的,我刚刚在 IE8 中对此进行了测试,但我陷入了重定向循环。我已经更新了代码以使用一个简单的变量来检查我们是否已经重定向。似乎工作。我很想知道一种更漂亮的方式。

关于angularjs - 将 Angular 路由与往返路由一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17318746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com