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

标签 javascript node.js angularjs

我使用 Node.js 作为服务器,它完全运行良好,除非我将 AngularJS 添加到堆栈中,这完全破坏了 Node.js 中的所有 URL。具体来说,我想通过响应选项卡的点击来切换 Bootstrap 3 导航栏中选项卡的 active ,但我希望 AngularJS 仅切换选项卡的事件/非事件,并且不'我不希望 AngularJS 独立于其他任何东西,而我希望 Node 来管理这些东西。

这是我的 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("!");
}]);

和 Controller 代码:


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 模板,只想用它来控制切换功能。

请注意,即使通过点击进行的转换不起作用,当我在浏览器窗口中输入 URL 并按回车键时,转换也会正常工作。奇怪。

最佳答案

将 AngularJS 与 ngRoute 一起使用意味着 AngularJS 将尝试处理您的所有路由需求,但是您可以不使用它。将路由处理留给 Node:

  • 取消 ngRoute 依赖项,然后完全删除 .config 部分。
  • 从 Controller 中删除 $routeParams
  • 在您的页面(由 Node 处理)中,您需要将 ng-controller="MyCtrl" 添加到您的 body 元素。

$location 现在应该可以正常工作,只需更新您的选项卡类即可。如果没有,请改用 $window.location.pathname

关于javascript - 当我使用 AngularJS $routeProvider 时,Node.js 页面转换不再起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23036856/

相关文章:

javascript - 如果用户点击 "enter/return"键,如何处理 textarea 多行输入

javascript - RangeError : Maximum call stack size exceeded caused by array. splice.apply?

javascript - 我的函数返回未定义,我该如何解决这个问题

node.js - 在浏览器上下载文件

node.js - 如何使用 node.js 使用自定义协议(protocol)/方案定义路由?

javascript - 错误 : [ng:areq] Argument 'DoughnutCtrl' is not a function, 未定义

Javascript 函数返回 undefined variable

javascript - 内容太长,如何在console.log()中显示完整的内容?

javascript - “Thinking in AngularJS”,如果我有jQuery背景?

javascript - 对于更简单的用例来说 angular.js 是否被认为太大