基于URI的角度条件类

时间:2014-10-01 17:23:21

标签: angularjs

我已将此添加到我的侧导航控制器中:

if($location.path() == '/goals') {
    $scope.goals_active = true;
}

这非常合适,并将活动类应用于ng-class

但是,我现在遇到的问题是id。

即。 /goals/b2dcf461-56f6-f812-bed0-538e1603a595

如何在Angular(并在必要时使用$ location)告诉我的应用程序,不仅在路径为$scope.goals_active时将true设置为/goals,还要/goals/:id 1}}?

我需要某种*运算符,但不知道这是怎么回事。

4 个答案:

答案 0 :(得分:1)

只需使用正则表达式:

/\/goals(\/.*)?/.test($location.path());

以下是一个快速代码段,显示了测试代码的实际效果:



var urls = ['/goals', '/goals/', '/goals/12345'];

urls.forEach(function(url){
  var matches = /\/goals(\/.*)?/.test(url);
  
  document.write("url: " + url + "  [" + matches + "]");
  document.write("<br />");
});
&#13;
&#13;
&#13;

答案 1 :(得分:0)

     if($location.path().indexOf("/goals") >= 0)

应与其中的/目标匹配。

答案 2 :(得分:0)

如果您认为自己没有像/goalsSomething那样的网址,那么您可以这样做:

if($location.path().match('/goals')) {
    $scope.goals_active = true;
}

或斯科特建议的。

答案 3 :(得分:0)

您最安全的路线可能是使用正则表达式:

if( /\/goals(\/.*)?/.test($location.path()) ) { $scope.goals_active = true; }

您也可以使用indexOf,但是当您体验带有&#39; / goalsasdf&#39;等其他文字的路线时,会开始变得更加复杂。 There are also a number of other ways to do this, with increasing complexity