角度路由对不同的浏览器表现出奇怪/不同

时间:2016-04-08 15:32:33

标签: javascript angularjs html5

我正在重新发送这个,因为有人决定“改进”我的措辞,使事情难以理解。如果有人希望提高我的英语水平,我会恳请他/她确保他/她能掌握比我更好的语言。

现在问到原来的问题......

我刚刚使用AngularJS和Bootstrap编写了一个新的WEB项目。开发使用Brackets进行,Brackets是一个编辑工具,可以在作为Web SERVER运行时启动Chrome进行测试。

到目前为止,当Brackets用作SERVER以及整个项目在TOMCAT安装中部署时,一切都按要求工作,只要浏览器使用的是Chrome,机器就是 Windows 10计算机

现在,我开始使用不同的浏览器和设备(例如平板电脑,手机等)测试项目,并且... OOPS !!!我一直在崩溃。

似乎第一个(也许是中心)问题来自我实施和使用Angular的路由服务的方式(或者,至少,这是我发现的几个帖子的建议)。发生了两件事情(取决于浏览器和触发的动作)指向这个方向:

  1. 我多次收到错误infdig,这意味着某处存在无限重载循环,

  2. 当用户成功登录系统时,包含用户详细信息的对象将存储为$rootScope对象,并且当使用$window.location.href命令移动到其他页面时,以前存储的所有用户信息都会消失(奇怪的是,Chrome不会发生这种情况,但IE和Edge会发生这种情况!)。

  3. 不幸的是,我无法完全理解使用路由服务的正确方法。

    项目的结构是:

     [MyApp]                    -- This is the folder containing the whole project under TOMCAT's "webapps" folder
          index.html
          index.js              -- Contails the controller related ot the index.html page
          [pages]               -- Sub-folder hosting all the pages of the project except for the `index.html`
             page1.html
             page2.html
             :
             :
          [js]                  -- Sub-folder hosting the controllers of each and every sub-page
             page1.js           -- Sub-page controller
             page2.js           -- Sub-page controller
             :
             :
    

    使用命令$window.location.href = "#page1.html";转换到子页面(例如page1.html等),并定义了路由服务:

    $routeProvider
        :
        :
        .when('page1.html', {
                templateUrl: '#/pages/page1.html',
                controller: 'Page1Controller'
        }
        .when('page2.html', {
                templateUrl: '#/pages/page2.html',
                controller: 'Page2Controller'
        }
        :
        :
    

    基于与如何定义路由相关的一些帖子,我也尝试过:

        .when('page1.html', {
                templateUrl: 'pages/page1.html',
                controller: 'Page1Controller'
        }
    

    .when('page1.html', {
                templateUrl: '/pages/page1.html',
                controller: 'Page1Controller'
    }
    

    在两种情况下都会出错(例如找不到网页)。

    此外,我不清楚包含声明$locationProvider.html5Mode(true);的影响是什么(包括此时,我得到了注入错误)。

    如果有人能够为我提供有关如何正确使用此Angular路由服务以及是否以及如何设置HTML5模式的简单直接解释,我将非常感激。

    非常感谢提前。

2 个答案:

答案 0 :(得分:2)

路由参数: 我完成它的方式,它适用于我,它的简单使用我之前展示的相同的路线功能: enter image description here

然后,如果你看看&search;搜索结果/:searchCriteria' :搜索条件已经是一个参数,我把它放在一个名为sys的javascript变量中(即在我的javascript的乞讨声明变量var sys = null;)。然后在SearchResult控制器上我把sys的值放在$ scope变量中,让我们说$ scope.sys = sys;。如果你想检查开发人员工具控制台中的值和/或玩它们,这会在范围和javascript中为你提供变量

调用pafe http://url/#searchresult/myvalue

就像调用$ location.path之前一样(" / searchresult / myvalue")

像这样你可以创建一个包含许多参数的路径(即" / searchresult / myvalue1 / myvalue2 / myvalue3")并且它们都将存储在变量sys

让我知道它是否适合你

ps:如果你想改变你的整个网址,请使用window.location.replace(' new url')而不用任何$。此路由与角度之间的区别在于,这将刷新页面,而角度将仅刷新ng-view

ps2:如果您仍然希望示例代码让我知道,如果您决定使用角度RootScoope变量并使其正常工作,请共享代码lol

答案 1 :(得分:1)

关于未找到的网页问题请确保templateUrl:' pages / page2.html'具有与实际文件夹中相同的路径

- capital letters  
- the s in "pages" is also present in the pages folder

还要确保权限正常,以免您的应用程序被拒绝访问该文件。不知道你正在使用什么操作系统,但要确保你的应用程序可以访问它

关于循环错误,为了帮助我需要查看更多代码,但是如果您在crhome中打开应用程序并在开发人员工具中看到错误,它可能会给您一个关于应用程序崩溃的位置的提示。 ..其他方法开始评论应用程序的一部分,直到你没有得到错误找到有问题的行然后分析

这是我使用w / o问题的控制器的一个例子

enter image description here