【问题标题】:AngularJS - Use two different controllers?AngularJS - 使用两个不同的控制器?
【发布时间】:2018-09-27 02:21:27
【问题描述】:

我开始使用 AngularJS,但我不确定如何更新导航栏选择。我在 index.html 中有两件事,导航栏(带有我需要更新的标签)和带有 ngView 的 div。

对于不同的视图,我使用 ngRoute 来更改模板并将控制器附加到这些模板。但是,对于导航栏,我不确定是否应该在 HTML 中添加“ng-controller="tabController"。 这似乎不正确,因为我已经在检查视图的路线,并且会检查两次。

这是我的导航栏和带有视图的 div 的代码,其中具有“活动”类的 li 应与 div 中显示的视图对齐:

<nav class="navbar navbar-default" ng-controller="tabController">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="#/">Recetas Helper</a>
        </div>
        <ul class="nav navbar-nav">
            <li><a href="#/">Home</a></li>
            <li class="active"><a href="#/helper">Helper</a></li>
            <li><a href="#/insert">Insertar</a></li>
            <li><a href="#/randomizer">Randomizer</a></li>
        </ul>
    </div>
</nav>
<div class="main-view" ng-view></div>

这是我的 app.js 代码,控制器所在的位置并检查了路由:

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

app.config(function($routeProvider) {
    $routeProvider
        .when("/", {
            templateUrl: "partials/home.html",
            controller: "homeController"
        })
        .when("/helper", {
            templateUrl: "partials/helper.html",
            controller: "helperController"
        })
        .when("/insert", {
            templateUrl: "partials/insert.html"
        })
        .when("/randomizer", {
            templateUrl: "partials/randomizer.html"
        })
        .otherwise({
            templateUrl: "partials/ups.html"
        });
});


app.controller('tabController', function($scope) {...});

app.controller('homeController', function($scope) {...});

app.controller('helperController', function($scope) {...});

这是我第一次在 SO 中提问,所以请告诉我是否缺少任何重要信息,或者相反。谢谢!!

【问题讨论】:

  • 您好,欢迎来到 SO!不太清楚你想在这里实现什么,你所说的“更新选项卡选择”到底是什么意思?我也不明白这一点“我仍然需要检查路线以更改活动选项卡”。您可以编辑您的问题以增加精度吗?请记住,我们对您的项目一无所知,请不要犹豫,用代码示例说明您所说的
  • 感谢@Kaddath,我试图更好地解释它

标签: angularjs controller ngroute


【解决方案1】:

据我了解,您基本上是在使用nav-bar 并相应地更改路线。将其称为Tab 会使其更加混乱,因为 TAB 与导航栏不同。我的建议:

  1. 重命名为Navigation Controller
  2. 如果您使用的是 1.5 及更高版本,请创建一个组件,因为它们是 AngularJS 1.X 新版本的更好方法
  3. 对于您共享的上述代码,您可以检查$location 并相应地使用ng-classactive 类应用于选定的div。这将是唯一的解决方案,因为您需要将active 类应用于div,它将按照routing 呈现

休息一切看起来都很好

【讨论】:

  • 感谢@Shasank Vivek,它通过使用$location 工作,但仅在我第一次访问该页面时,它不会在url 更改时更新,知道为什么吗?
  • 在 navigationController 我有: $scope.url = $location.$$url; // 并且在每个 li 中,每个案例都有 ng-class="{active: url == '/helper'}"
  • @tonyjojo:是的,这是因为控制器已经加载,所以它保存了第一次加载的$location 数据。你的情况可以参考stackoverflow.com/questions/14765719/…。路由改变时需要捕获事件
  • 再次感谢@Shashank Vivek!
猜你喜欢
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多