gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:41:37 24 4
gpt4 key购买 nike

我在使用 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/

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