当前位置: 首页 > 面试题库 >

AngularJS:如何使用深度链接启用$ locationProvider.html5Mode

薛经纶
2023-03-14
问题内容

通过启用AngularJS中的html5Mode时$locationProvider.html5Mode(true),当您进入站点更深的页面时,导航似乎偏斜。

例如:

  • http://www.site.com
    当我导航到根目录时,我可以单击站点中的所有链接,Angular $routeProvider会接管整个站点的导航并加载正确的视图。

  • http://www.site.com/news/archive
    但是当我导航到该URL时(或者当我进入上述类似的深层链接时点击刷新…),该导航无法正常工作。首先,按照$
    locationProvider.html5Mode的文档规定,我们捕获服务器上的所有url(类似于otherwiseangular中的路由),并返回与根域相同的html。但是,如果我再$locationrun角度函数中检查对象,它会告诉我那http://www.site.com是我的host/archive就是我的path。在$routeProvider到达的.otherwise()条款,因为我只有/news/archive一个有效的途径。该应用程序确实很奇怪。

也许服务器上的重写需要以不同的方式进行,或者我需要以角度指定内容,但是目前我不知道为什么角度看到的是不/news包含该段的路径。

示例main.js:

// Create an application module
var App = angular.module('App', []);

App.config(['$routeProvider', '$locationProvider', function AppConfig($routeProvider, $locationProvider) {

    $routeProvider
        .when(
        '/', {
            redirectTo: '/home'
        })
        .when('/home', {
            templateUrl: 'templates/home.html'
        })
        .when('/login', {
            templateUrl: 'templates/login.html'
        })
        .when('/news', {
            templateUrl: 'templates/news.html'
        })
        .when('/news/archive', {
            templateUrl: 'templates/newsarchive.html'
        })
        // removed other routes ... *snip
        .otherwise({
            redirectTo: '/home'
        }
    );

    // enable html5Mode for pushstate ('#'-less URLs)
    $locationProvider.html5Mode(true);
    $locationProvider.hashPrefix('!');

}]);

// Initialize the application
App.run(['$location', function AppRun($location) {
    debugger; // -->> here i debug the $location object to see what angular see's as URL
}]);

*根据请求进行 *编辑
,有关服务器端的更多详细信息:服务器端由zend框架的路由组织,并且由它处理自己的路由(用于将数据提供给特定/apiurl 的前端,最后有一个问题-
all路由(如果未绑定其他特定路由),则与根路由使用相同的html。因此,它基本上在该深度链接的路由上提供首页html。

*在检查了问题后, *更新2 我们注意到该路由在Angular 1.0.7稳定版本上可以正常工作,但在Angular
1.1.5不稳定版本中显示了上述行为。

我已经检查了更改日志,但到目前为止还没有发现任何有用的东西,我想我们可以将其提交为错误,也可以将与他们所做的某些更改相关的不想要的行为提交,或者仅等待并确认它是否已固定稍后将发布稳定版本。


问题答案:

这个问题是由于使用了AngularJS 1.1.5(它是不稳定的,并且显然有一些bug或与1.0.7版本不同的路由实现)

将其恢复为1.0.7可立即解决该问题。

已经尝试了1.2.0rc1版本,但是还没有完成测试,因为我不得不重写某些路由器功能,因为他们将其从核心中删除了。

无论如何,当使用AngularJS vs 1.0.7时,此问题已解决。



 类似资料:
  • 众所周知,iOS深层链接已经改变了一点,称为通用链接,有了通用链接,我们需要在您的Xcode项目中启用“关联域”,并在那里添加受支持的域,还有一些变化,如在域服务器上托管苹果应用站点关联JSON。 这一点我非常理解,但我的问题是我必须支持多个社区,可能每个使用应用程序的企业都会有自己的社区,所以将所有社区(域)添加到“关联域”中不是一件好事,如果有新企业使用应用程序,然后我需要提供一个应用程序更新

  • 问题内容: 在promise库 Q中 ,您可以执行以下操作以顺序链接promise: 但是,以下命令不适用于 $ q : 问题答案: 只需使用$ q.when()函数: 注意:foo必须是工厂,例如

  • 我在Android上使用了一个用Ionic构建的应用程序中的deep link。当我点击链接时,应用程序打开了,但仅仅一秒钟后就崩溃了。如何调试此问题? 这是AndroidManifest.xml中的意图代码: 更新 通过使用Android Studio,我有以下日志:

  • 我遵循了https://developer.android.com/training/app-indexing/deep-linking.html上的insttructions,但当我想通过触发意图时: 我只是得到 我犯了什么明显的错误吗?

  • 问题内容: 我有一个启用HTML5模式的Angular.js应用程序。 我要实现的是获取一些URL或标签来执行正常的浏览行为,而不是使用HTML5历史API更改地址栏中的URL并使用Angular控制器对其进行处理。 我有这个链接: 我希望浏览器将用户重定向到,以便将用户重定向到身份验证服务。 有什么办法可以做到吗? 问题答案: 在Angular 1.0.1中添加作品: 记录了此功能(https:

  • 在我阅读的过程中,iOS 9引入了通用链接。在苹果应用程序搜索编程指南的“支持通用链接”一节中,它说这与URL方案的深度链接并不完全相同,但我对这个话题并不完全清楚: 通用链接和URL方案之间的区别是什么?是不是通用链接只适用于网站中的超链接,以及邮件或消息应用程序? 通用链接取代URL方案吗? 通用链接是一种深层链接吗?