javascript - Angular 两次渲染主视图而不是加载正确的模板

标签 javascript php angularjs laravel angular-ui-router

我在使用 Angular 模板时遇到问题 - 主视图(最初加载的 View )没有包含正确的模板,而是渲染了两次。在花了过去 2 天的大部分时间试图解决这个问题之后,我仍然一无所获。

更详细的描述:

我正在使用 Angular 开发用于管理网站内容的单页应用程序。这个网站的其余部分是用 Laravel 构建的。 Angular 仅用于内容管理系统,它是一个独立的应用程序,受 Laravel 的 HTTP 过滤器和身份验证系统保护。

当 Angular 应用程序不位于根 URL(例如,http://application.dev 有效,而 http://application.dev/admin 没有)。

主要代码(精简到最基本的部分以试图找到问题所在):

/*global angular*/
var App = angular.module('Dashboard', ['ui.router']);

App.config(function ($stateProvider, $urlRouterProvider, $locationProvider) {
    'use strict';
    $locationProvider.html5Mode(true).hashPrefix('!');

    $stateProvider.state('statistics', {
        url: '/statistics',
        templateUrl: 'statistics/index.html'
    });

    $stateProvider.state('notifications', {
        url: '/notifications',
        templateUrl: 'notifications/index.html'
    });

    $urlRouterProvider.when('/', '/statistics');
});

应用程序 View :

<!DOCTYPE html>
<html lang="en" ng-app="Dashboard">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <base href="/admin/">
    </head>
    <body>
        <div id="container" class="full">
            <header>
                <nav>
                    <ul>
                        <li><a ui-sref="statistics">Statistics</a></li>
                        <li><a ui-sref="notifications">Notifications</a></li>
                    </ul>
                </nav>
            </header>
            <div id="content" ui-view></div>
        </div>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.24/angular.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.min.js"></script>
        <?php echo HTML::script(asset('javascripts/main.js')) ?>
    </body>
</html>

由于某种原因未包含的示例模板:

<section id="statistics">
    <h3>Statistics</h3>
</section>

Laravel 路由文件:

Route::group(
    [
        'namespace' => 'Admin',
        'prefix' => 'admin'
    ],
    function () {
        Route::group(
            [
                'namespace' => 'Account'
            ],
            function () {
                Route::group(
                    [
                        'prefix' => 'login'
                    ],
                    function () {
                        Route::get('/', [
                            'as' => 'admin.login',
                            'uses' => 'LoginController@showLogin'
                        ]);

                        Route::post('/', [
                            'uses' => 'LoginController@attemptLogin'
                        ]);
                    }
                );

                Route::get('logout', [
                    'as' => 'admin.logout',
                    'uses' => 'LogoutController@attemptLogout'
                ]);
            }
        );

        Route::get('/', [
            'as' => 'admin.dashboard',
            'before' => 'auth',
            'uses' => 'DashboardController@start'
        ]);
    }
);

每次我使用 templateUrl 选项(template 显然有效,因为没有包含文件),它不包含正确的模板。相反,另一个请求被触发到 http://application.dev/admin URL,它在收到 200 OK 状态代码后基本上复制了整个 View 。我试图使用 Chrome 的开发人员工具来缩小问题的范围——唯一不寻常的是请求发起者是通常应该包含的模板(或 URL)。不幸的是,这并没有多大帮助。

我有点怀疑这个问题可能是Laravel的路由或者URL重写导致的,但是我还没有能够验证它。任何想法可能是这种行为的原因?

编辑:

添加了 routes.php 文件以防它可能导致此问题。

最佳答案

在这上面花了太多时间之后,我终于找到了问题所在。事实证明,当 URL 有多个部分时(就像在我的情况下),必须在 templateUrl 值前面加上一个正斜杠。在我的例子中,它必须是这样的:/javascripts/statistics/index.html

看似简单的解决方案,却让我头疼不已。我发布这个以防有人遇到类似问题。

致谢 this answer .

关于javascript - Angular 两次渲染主视图而不是加载正确的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25833675/

相关文章:

php - PHP 中的 EOT 仅显示一行

php - 在新标签页中从 FPDF 打开 PDF

AngularJS: Controller /服务应该是帕斯卡案例? (在 yeoman 中使用 Yo)

angularjs - 使用服务对 Controller 进行 Angular 单元测试 - 注入(inject)时中断

javascript - 将对象转换为 URL 编码字符串时无法将对象转换为原始值

javascript - Kendo 进度条在进行 ajax 调用时未启动

javascript - 如何在 Javascript 中检查函数的返回值是否未定义

javascript - Jquery slideup slidedown 意外行为

javascript - ie11中的RSA-OEP加密

php - 推送器 PHP "server"不工作