当我使用AngularJS $ routeProvider的时候,Node.js页面转换不再起作用

我使用Node.js作为服务器,它完全正常工作,除非将AngularJS添加到堆栈中,这完全破坏了Node.js中的所有URL。 具体来说,我想切换在Bootstrap 3导航栏中的标签的active与响应的标签点击,但我希望AngularJS只切换选项卡的活动/不活动,并不希望AngularJS站在任何东西其他,我希望节点pipe理。

所以这里是我在Angular中的代码:

 "use strict"; var MyApp = angular.module("MyApp", ["ngRoute"]); MyApp.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) { $routeProvider. when("/contact", {controller: MyCtrl}). when("/blog", {controller: MyCtrl}); $locationProvider.html5Mode(true); $locationProvider.hashPrefix("!"); }]); 

和控制器代码:

 function MyCtrl($scope, $routeParams, $location) { $scope.isActive = function(viewLocation) { return viewLocation === $location.path(); }; } 

和HTML代码:

 <div class="collapse navbar-collapse" ng-controller="MyCtrl"> <ul class="nav navbar-nav"> <li ng-class="{ active: isActive('/')}"><a href="/">Home</a></li> <li ng-class="{ active: isActive('/blog')}"><a href="/blog">Blog</a></li> <li ng-class="{ active: isActive('/contact')}"><a href="/contact">Contact</a></li> </ul> </div> 

但是,当我点击我的Chrome浏览器中的任何标签时,切换可以正常工作 – 例如,当我点击“博客”选项卡时,它在Bootstrap 3导航栏中处于活动状态。 但是,页面没有正确转换,所以实际的博客内容无法显示在屏幕上 – 所有更改都是选项卡切换。

事情更糟糕的是,当我点击屏幕上的另一个内容,这是在Bootstrap 3导航栏的控制之外,那么它仍然会导致过渡中断,并且页面仍然是一个预先点击的状态。

那么我怎么才能正确地让页面转换到正确的页面,并让Angular只切换导航栏选项卡的激活/非激活状态? 我不使用AngularJS模板,只需要它来控制切换function。

请注意,即使点击转换不起作用,当我input浏览器窗口的URL并按下返回键时,转换仍然正常工作。 奇怪的。

AngularJS与ngRoute使用意味着AngularJS将尝试处理所有的路由需求,但是你可以不用它。 要离开路由处理到Node:

  • 放弃你的ngRoute依赖,然后删除你的.config部分。
  • 从你的控制器中删除$routeParams
  • 在你的页面(由Node处理)中,你将需要添加ng-controller="MyCtrl"到你的body元素。

$location现在应该工作正常,只是更新您的标签类。 如果不是,请改用$window.location.pathname