Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS——视图不会在我的浏览器中渲染?_Javascript_Angularjs_Node.js - Fatal编程技术网

Javascript AngularJS——视图不会在我的浏览器中渲染?

Javascript AngularJS——视图不会在我的浏览器中渲染?,javascript,angularjs,node.js,Javascript,Angularjs,Node.js,我正在导航到我在angular应用程序中设置的路线“/login”。当我尝试使用角度路由导航到我创建的视图时,我只在页面上看到导航栏,而在ng视图中看不到任何内容。在我的chrome控制台的“网络”选项卡中,它显示视图已被成功请求并发送到客户端,但它未在view source中为我呈现。我还想指出,我的“/”路线正在运行。控制台中没有错误 我正在为我的Web服务器使用NodeJS+ExpressJS。这是一个温泉浴场。此外,我正在使用RequireJS进行模块加载 server.js var e

我正在导航到我在angular应用程序中设置的路线“/login”。当我尝试使用角度路由导航到我创建的视图时,我只在页面上看到导航栏,而在ng视图中看不到任何内容。在我的chrome控制台的“网络”选项卡中,它显示视图已被成功请求并发送到客户端,但它未在view source中为我呈现。我还想指出,我的“/”路线正在运行。控制台中没有错误

我正在为我的Web服务器使用NodeJS+ExpressJS。这是一个温泉浴场。此外,我正在使用RequireJS进行模块加载

server.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);
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']
});
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']);
    });

});
define([
    'angular',
     'angularRoute'
 ], function(angular, angularRoute) {

'use strict';

var app = angular.module('myApp', ['ngRoute']);

return app;

});
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'
        });
    });
});
index.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>
bootstrap.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);
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']
});
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']);
    });

});
define([
    'angular',
     'angularRoute'
 ], function(angular, angularRoute) {

'use strict';

var app = angular.module('myApp', ['ngRoute']);

return app;

});
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'
        });
    });
});
app.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);
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']
});
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']);
    });

});
define([
    'angular',
     'angularRoute'
 ], function(angular, angularRoute) {

'use strict';

var app = angular.module('myApp', ['ngRoute']);

return app;

});
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'
        });
    });
});
routes.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);
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']
});
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']);
    });

});
define([
    'angular',
     'angularRoute'
 ], function(angular, angularRoute) {

'use strict';

var app = angular.module('myApp', ['ngRoute']);

return app;

});
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路线将遵循
/
路线。但是,如果键入
http://myapp.com/myapp/login
,它将不会遵循
登录路径。这是因为
ng route
希望路由位于
#
之后

尝试键入
http://myapp.com/myapp/#/login
,显然是将
myapp
部分替换为应用程序的适当路径

另外,创建一条
/home
路由可能会有所帮助,然后使用
$routeProvider
.otheris()
功能将该路由设置为它加载的默认路由。这样,如果您试图点击一条不存在的路线,它将默认为
/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视图时,请始终使用浏览器的元素检查器。浏览器中的“查看源代码”选项永远不会显示已加载的模板代码,因为页面的实际源代码只包含
,而不包含模板代码。

我的视图实际上是呈现的。但由于我使用的是固定导航栏,它显示在导航栏后面(因此它是不可见的)。我可以在ng view div的顶部添加一个边距,这非常简单。

broser控制台中有任何消息吗?类似于“找不到js/views/login.html吗?”。在访问“/”路由时,您发送的似乎不是服务器发送的文件,而是html文件,而不是静态依赖项。如果控制台中有任何消息,请告诉我。不,没有错误,当我导航到example.com/#/login时,我可以在网络控制台中看到login.html。您可以通过编程方式尝试移动到/login吗?类似于
$location.path('/login')
从您的homeCtrl?@Zlatko调用login()时,我正在navCtrl中执行此操作。当我以这种方式更改路由时,我得到了相同的结果。我使用hashbang btw导航,没有工作。只是再次测试导航到,导航栏显示,控制台中没有错误,login.html显示在网络控制台中,但没有填充到ng VIEW中。当您直接键入它时尝试刷新。好的,你把我难住了。哈哈,经典。所以你的路线一直没有问题:P