【问题标题】:How to setup ngclass change when route change occurs in AngularJS?AngularJS中发生路由更改时如何设置ngclass更改?
【发布时间】:2014-04-02 15:38:51
【问题描述】:

当路由发生变化时,我正在尝试在我的主 .container 类上添加一个类。

我目前的简单解决方案包括在每个主菜单 url 上都有一个 ng-click(页面上没有其他 url):

app.controller('MainCtrl', ['$scope', function( $scope ){

  $scope.setMain = function( value ){ $scope.isMain = value };

}]);

然后在我的html中:

<div ng-controller="MainCtrl" class="container" ng-class="{'main': isMain}">
  <ul class="main-menu">
    <li><a href="#" ng-click="setMain(true)"></li>
    <li><a href="#/page-1" ng-click="setMain(false)"></li>
    <li><a href="#/page-2" ng-click="setMain(false)"></li>
  </ul>
  <div ng-view></div>
</div>

只要我需要添加更多 url,这似乎可以正常工作,问题是当用户不点击任何链接并直接访问他没有获得主类的 url 时。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 当你说“直接访问一个 url”时,你的意思是他们在地址栏中键入内容、路径以编程方式更改,还是完全其他?
  • @maf748 是的,我的意思是他们在地址栏中输入。

标签: javascript angularjs ngroute ng-view


【解决方案1】:

您可以使用几个不同的选项,但我认为最简单的方法是通过查看 $location 在控制器初始化时设置 $scope.isMain 值。所以在控制器内部你可以有类似的东西:

var loc = $location.path();
if(loc === /* some route rule you require */){
    $scope.isMain = true;
}

看看这里:http://docs.angularjs.org/api/ngRoute/service/$route 作为底部的示例,有几个不同的示例说明您可以访问与路线有关的数据类型。

【讨论】:

  • 我想过使用路由参数,但这意味着我必须为每个视图加载相同的控制器。如果我错了,请纠正我,但如果我想为其中一个视图使用单独的控制器,我将不得不设置某种服务来共享路由。
  • 或者你可以创建一个父控制器来处理基于路由的状态,并有单独的子控制器。
  • 好主意。这是你在回答中的意思吗?
  • 是的。我一直使用通用的父控制器。
猜你喜欢
  • 1970-01-01
  • 2019-09-13
  • 2014-01-15
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
相关资源
最近更新 更多