使用角度 js 进行路由

Posted

技术标签:

【中文标题】使用角度 js 进行路由【英文标题】:Routing with angular js 【发布时间】:2016-04-07 06:22:48 【问题描述】:

我的服务器使用 Angular 进行路由。我的服务器向浏览器发送一个 html 文件,其中包含带有路由的 js 文件(使用 Angular js)。

我的服务器代码(发送到浏览器 check.html 包含路由文件 main.js):

var express = require("express");
var app = express(); // express.createServer();
app.use(express.static(__dirname + '/public'));
app.get("/*", function(request, response) 
    response.sendFile(__dirname + '/public/check.html');
);

app.listen(8080);

check.html 代码:

<html data-ng-app="myApp">
    <head>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript" src="angular.js"></script>
        <script type="text/javascript" src="angular-route.js"></script>
        <script type="text/javascript" src="main.js"></script>
    </head>
    <body>
    </body>
</html>

在浏览器获取 check.html 文件后,他不会将其重定向到 main.js 以使用路由。我试图调试它,但浏览器卡住了,什么也不做。我的应用是本地的,我试图连接的 url 是:

http://localhost:8080/stations

所有文件都正确加载,控制台上没有任何错误。

main.js 代码:

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

myApp.config(function($routeProvider) 
    $routeProvider
        .when('/',
            
                controller: 'HomeController',
                templateUrl: 'menu.html'
            )
        .when('/stations',
            
                controller: 'StationsController',
                templateUrl: 'check2.html'
            )
        .when('/',
            
                controller: 'HomeController',
                templateUrl: 'menu.html'
            )
        .otherwise(redirectTo: '/');
);

myApp.controller('StationsController', function($scope)
    $scope.check = name:"ELAD!!";
);

check2.html 代码:

<html>
<head>
</head>
<body>
    <div>
        <p>check.name</p>
    </div>
</body>
</html>

【问题讨论】:

控制台告诉你什么?并检查您的 .js 文件是否包含真正的 html 内容,而不是 check.html 的内容 @GalSosin 当刚接触 Angular 时,混合服务器端和客户端是一个常见的误解 【参考方案1】:

好的,让我们重新开始 angular..

角度 101

您可能知道角度对于 单页应用程序 是必不可少的,所以在您的情况下,您提供的第一页是 check.html,但您应该将其命名为 index.html,这是一个约定。 khair .. 当route 转换发生在您的角度代码中时会发生什么,这是# 之后的东西,它纯粹是客户端或软重定向。所以 Angular 会触发 AJAX 请求以从路由器中检索与您的 templateUrl 匹配的资源。然后将其插入&lt;div ng-view&gt;&lt;/div&gt; 中,从而进行重定向。注意ng-view

下面是建议的解决方案

链接应该是http://localhost:8080/#stations,因为角度匹配处理#之后的路线。您提供的链接等其他路线将交给server

你的check.html 应该是这样的。

<html data-ng-app="myApp">
    <head>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript" src="angular.js"></script>
        <script type="text/javascript" src="angular-route.js"></script>
        <script type="text/javascript" src="main.js"></script>
    </head>
    <body>
        <div ng-view></div>
    </body>
</html>

并且您的check2.html 应该在您的公共目录中并且具有类似的代码

<div>
   <p>check.name</p>
</div>

【讨论】:

以上是关于使用角度 js 进行路由的主要内容,如果未能解决你的问题,请参考以下文章

如何在角度js中获取路由值到控制器

带有角度路由的 Laravel 5 中间件

角度2,在ng build --prod之后,ui-router停止工作

在快速服务器上成功调用 api 后重定向具有角度路由的页面

如何在两个页面之间进行 ngRoute

如何使用httpclient作为二进制文件以角度加载字体文件(ttf和otf)以使用opentype.js进行处理