【问题标题】:Relating routing and navigation styles with AngularJS使用 AngularJS 关联路由和导航样式
【发布时间】:2014-05-29 04:18:55
【问题描述】:

假设您在 Angular 中设置了一个基本路由器,如下所示:

app.config(function($routeProvider) {
    $routeProvider.when('/', {
        redirectTo: "/news"
    }).when('/news', {
        templateUrl: "partials/pages/news.html",
        controller: "NewsCtrl"
    }).when('/about', {
        templateUrl: "partials/pages/about.html",
        controller: "AboutCtrl"
    })
});

然后你有一个index.html,看起来像:

<nav>
    <ul>
        <li><a href="#/news" class="active">news</a></li>
        <li><a href="#/about">about</a></li>
    </ul>
</nav>
<section ng-view></section>

.active 类添加到路由对应的链接的最佳方法是什么?为导航创建一个控制器?使用$rootScope?等等。我对这两个选项都有问题,因为当我实现它时,它们看起来都不是很干净。

【问题讨论】:

    标签: javascript angularjs angularjs-routing


    【解决方案1】:

    我使用下一个代码:

    <ul class="navigation">
      <li ng-class="{active : (current == '/')}"><a href="/"><span>Articles</span></a></li>
      <li ng-class="{active : (current == '/about')}"><a href="/about"><span>About</span></a></li>
      <li ng-class="{active : (current == '/contact')}"><a href="/contact"><span>Contact</span></a></li>            
    </ul> 
    

    在 JS 中:

    app.run(['$location', '$rootScope', function($location, $rootScope, $document) {
        $rootScope.$on('$routeChangeSuccess', function(event, current, previous) {
            $rootScope.current = $location.path();
        });
    }]);
    

    【讨论】:

    • 简单,适用于一般情况。如果你有像/news/:id 这样的路线,这样的事情就会开始分崩离析,不是吗?而且,如果您正在查看新闻文章,仍然可以使用 .active 类表明您在新闻页面上。
    • 是的,这是个问题。我通过 $rootScope.current = "/" + $location.path().split("/")[1]; 临时解决了这个问题但是这个解决方案与好的解决方案相去甚远。仍在等待有效的解决方案。
    • 听起来我们在同一条船上。我想出的最简单的解决方案(虽然很复杂)是在$rootScope 中跟踪要突出显示的当前导航项,然后与导航项相关的每个控制器都会更改$rootScope。我敢肯定还有更好的东西。
    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2022-11-01
    • 2014-03-29
    • 1970-01-01
    • 2021-10-01
    • 2016-11-14
    相关资源
    最近更新 更多