Angular.js:在查看多个部分

时间:2016-10-25 15:04:36

标签: angularjs scope routes location partials

我希望这个问题不会让我头疼,但是因为我这个(把手指紧紧地握在一起)远远没有打我自己在头脑中,我想我会继续前进,吞下我的骄傲,无论如何都要问。

作为一个自我承认的Angular新手,当访问者调用该页面的特定部分时,我有一个问题隐藏我的索引文件(这是我的布局页面)上的div。

我有大约55个部分(范围蔓延是一个很棒的事情),并且违规的div不应该出现在其中的12个。

这是我的标记:

<div ng-show="somename" id="somename" ng-controller="somenameCtrl">
                        <div ng-include="'templates/somename.html'"></div>
                    </div>

这是我的控制器:

app.controller('somenameCtrl', function($scope, $route, $location) {

   $scope.$on('$routeChangeSuccess', function() {
      var path = $location.path();
      console.log(path);
      $scope.somename = true;
      if (path === '/thatpage') {
         $scope.somename = true;
      } else if (path === '/thispage') {
         $scope.somename = false;
   }
 });
});

我认为这将是最简单的前进方式,但现在我不太相信(如前所述)我有几个部分隐藏了索引文件中的div。显然,div没有显示在“这个页面”上,并且正在“该页面上正确显示”。 (以及除此之外的任何部分&#39;此页面被称为。

但是,我不需要在页面上显示div&#39; thispage2&#39; - &GT; &#39; thispage12&#39;并将其显示在其他所有内容上。关于如何实现这个目标的任何想法?

感谢任何帮助 - 如果有任何不清楚的地方,请告诉我,我会尽力提供更清晰的信息。

1 个答案:

答案 0 :(得分:2)

在Angular中有很多方法可以做到这一点。太多了。

我假设你使用ui-router或ng-router。两个路由器都有resolve方法。在您定义的每个路由/状态中,您可以传递SomeName变量,如下所示:

.when('/someRoute', {
    templateUrl: '...',
    controller: '...',
    resolve: {
      SomeName: false;
    }
  })

然后将其包含在您的控制器中:

.controller(function(SomeName, $scope) {
    $scope.somename = SomeName || false;
}

这样,您只需要在{true} 的路线中定义SomeName变量。未定义时默认为false,因此您不需要在每条路径上定义它

当然,还有其他方法可以做到这一点,但在我看来,这似乎是最干净的方法