AngularJS -- 视图不会在我的浏览器中呈现
AngularJS -- View Will Not Render in my Browser?
我正在导航到我在角度应用程序中设置的路由"/login"。 当我尝试使用角度路由导航到我创建的视图时,我只看到页面上的导航栏,而 ng-view 内没有任何内容。 在我的 chrome 控制台的网络选项卡中,它显示视图正在成功请求并发送到客户端,但它没有在视图源代码中为我呈现。 另外,我想指出,我的"/"路由正在纠正。控制台中没有错误。
我正在使用NodeJS + ExpressJS作为我的网络服务器。 这是一个水疗中心。 我也在使用 RequireJS 进行模块加载。
服务器.js
var express = require('express'),
app = express(),
path = require('path'),
apiRouter = require('./app/routes/api'),
mongoose = require('mongoose'),
compression = require('compression');
app.use(compression());
app.use(express.static('public'));
app.use('/api', apiRouter);
app.use('*', function(req, res) {
res.sendFile(path.join(__dirname + '/public/index.html'));
});
mongoose.connect('mongodb://localhost/triviaattack');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
//Connected to DB successfully.
});
app.listen(1337);
索引.html
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<!-- Place favicon.ico in the root directory -->
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/main.css">
<!-- <script src="js/vendor/modernizr-2.8.3.min.js"></script> -->
<script data-main="js/main" src="js/vendor/require.js"></script>
</head>
<body>
<!--[if lt IE 8]>
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->
<nav class="navbar navbar-inverse navbar-fixed-top" ng-controller="navCtrl">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Brand</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><button class="btn btn-default navbar-btn" ng-click="login()">Login</button></li>
<li><button class="btn btn-info navbar-btn" ng-click="register()">Register</button></li>
</ul>
</div><!--/.navbar-collapse -->
</div>
</nav>
<div ng-view></div>
</body>
</html>
主.js
require.config({
paths: {
'angular': 'vendor/angular',
'domReady': 'vendor/domready',
'angularRoute': 'vendor/angular-route',
'bootstrapCss': 'vendor/bootstrap-css'
},
shim: {
'angular': {
exports: 'angular'
},
'angularRoute': {
deps: ['angular'],
exports: 'angularRouter'
}
},
deps: ['./bootstrap']
});
引导.js
require([
'angular',
'angularRoute',
'app',
'services/loginSvc',
'controllers/navCtrl',
'controllers/homeCtrl',
'controllers/loginCtrl',
'routes'
], function (angular, angularRoute, app) {
'use strict';
angular.element(document).ready(function () {
angular.bootstrap(document, ['myApp']);
});
});
应用.js
define([
'angular',
'angularRoute'
], function(angular, angularRoute) {
'use strict';
var app = angular.module('myApp', ['ngRoute']);
return app;
});
路线.js
define(['app'], function(app) {
'use strict';
app.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'js/views/home.html',
controller: 'homeCtrl'
})
.when('/login', {
templateUrl: 'js/views/login.html',
controller: 'loginCtrl'
});
});
});
我想您直接在浏览器中键入/login
路径。如果您在浏览器中手动输入路由,则当您输入http://myapp.com/myapp/
时,ng-route 将遵循/
路由。但是,如果您键入 http://myapp.com/myapp/login
,它将不会遵循login
路由。这是因为ng-route
预计路线会在#
之后到来。
尝试键入 http://myapp.com/myapp/#/login
,显然将myapp
部分替换为适合您的应用程序的路径。
此外,创建/home
路由,然后使用 $routeProvider
的 .otherwise()
函数将其作为它加载的默认路由可能会有所帮助。这样,如果您尝试访问不存在的路由,它将默认为/home
路由,而不是显示空白模板。
以下是您将如何实现这一点:
app.config(function($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'js/views/home.html',
controller: 'homeCtrl'
})
.when('/login', {
templateUrl: 'js/views/login.html',
controller: 'loginCtrl'
})
.otherwise({
redirectTo: '/home'
});
});
编辑:
使用ng-view
时,请始终使用浏览器的元素检查器。浏览器中的"查看源代码"选项永远不会显示加载的模板代码,因为页面的实际源代码仅包含<div ng-view></div>
,而不是模板代码。
我的观点实际上是渲染。 但是由于我使用的是固定的导航栏,因此它显示在它后面(所以它是不可见的。 我可以在我的 ng-viewdiv 顶部添加边距,非常简单的修复。
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 如何使用特定大小的浏览器窗口打开我的页面
- 对于如何在没有modernizr的情况下用边界半径的功能检测检查来替换我的旧浏览器检查
- 我的时间倒计时脚本在谷歌浏览器中工作正常,但在其他浏览器中打开时它显示为南楠
- 如何确保在浏览我的plone网站时始终启用浏览器中的javascript
- 在我的浏览器中用类似ctrl+s的PhantomJS保存一个网站
- 跨浏览器问题:如何调试我的网站'在windows PC的safari上的行为
- 为什么这会造成一个无休止的循环并使我的浏览器崩溃
- 我可以让我的网站的内容可编辑区域对安卓股票浏览器上的触摸事件更敏感吗
- 转换链接在jsfiddle中有效,但在我的浏览器上无效
- 浏览器扩展程序来跟踪我的谷歌活动
- 为什么我的谷歌浏览器扩展程序在谷歌浏览器版本 41.0.2272.89 中不起作用
- 我的javascript适用于所有浏览器,但IE8除外
- 当用户关闭浏览器选项卡时,如何使用 PHP 或 javascript 从我的站点注销用户
- 为什么我的 cshtml 页面的 javascript 没有在浏览器中更新/刷新
- 为什么IE浏览器不喜欢我的点击事件
- 离子应用程序在浏览器上运行,但在我的安卓设备中无法正常工作
- jQuery在我的网站上不起作用,但在我的浏览器上起作用
- 如何在浏览器页面切换到我的网站选项卡时创建事件,如gmail中的聊天框状态更改
- 如果从我的网站在浏览器中安装了其他程序,如何在移动应用程序中打开共享对话框