【问题标题】:How activate or not (nav tab) Bootstrap Twitter ( Angular 2 )如何激活或不激活(导航选项卡) Bootstrap Twitter(Angular 2)
【发布时间】:2016-02-22 10:16:39
【问题描述】:

我有一个导航,Twitter Bootstrap,在其中一个标签 (#B ..) 内,我有一个图像,点击它会切换到另一个标签 (#C ..)

我可以更改那个标签,但我不能,新标签(#C ..) 设置为活动状态。并且此图片选项卡(#B ..) 设置为停用。 (例如 removeClass active)

<ul class="nav nav-tabs">
    <li class="nav active"> <a [attr.href]="'#A' + cObj" data-toggle="tab"> Info </a></li>
    <li class="nav">        <a [attr.href]="'#B' + cObj" data-toggle="tab"> Info </a></li>
    <li class="nav">        <a [attr.href]="'#C' + cObj" data-toggle="tab"> Info </a></li>
</ul>

<div class="tab-pane fade"           [id]="'B' + cObj">
..//

<a [attr.href]="'#C' + cObj" data-toggle="tab">
<img...>
..//

我尝试使用 [class.active] =" false " 以各种方式使用它,例如 [ '#B' + cObj.class.active] =" false " 所以但我无法帮助我。

我希望能够激活和停用选项卡,从一个切换到另一个,对不起我的英语不好,希望你能理解我的问题


更新:我使用以下方法解决了。

也许用户的反应可以更好地帮助他人:


<ul class="nav nav-tabs">
    <li class="nav active" [id]="'IDA' + contadorObjet.name" [class.active]="testLocation1() == ('A' + contadorObjet.name) || '10'" >       <a [attr.href]="'#A' + contadorObjet.name" data-toggle="tab"> Info </a></li>
    <li class="nav"        [id]="'IDB' + contadorObjet.name" [class.active]="testLocation1() == 'B' + contadorObjet.name">                  <a [attr.href]="'#B' + contadorObjet.name" data-toggle="tab"> Info </a></li>
    <li class="nav"        [id]="'IDC' + contadorObjet.name" [class.active]="testLocation1() == 'C' + contadorObjet.name">                  <a [attr.href]="'#C' + contadorObjet.name" data-toggle="tab"> Info </a></li>
</ul>

注意:'10' 是测试的 ID 父级


<a [attr.href]="'#C' + contadorObjet.name" data-toggle="tab" 
   #elem (click)="testLocationAct(elem.href, 'IDB' + contadorObjet.name)" >

    testLocation1():string{
      //alert(document.activeElement.toString().split(/#(.+)?/)[1]);
      return document.activeElement.toString().split(/#(.+)?/)[1];
    }

    testLocationAct(test: any, test1: any){

      document.getElementById(test1).classList.remove('active');
      document.activeElement = test;
    }

更新:

你能添加一个plunker吗?我正在尝试侧边栏数据切换和 它不工作 - 加里

Plunker

在它为我想要的效果很好之前,在发布这个之后,我做了一些更改现在效果更好(我认为)。

<div class="container" *ngFor="#contadorObjeto of contadorObjetos ; #contadorObjetoI = index" nginit="test='#' id=10">

              <ul class="nav nav-tabs">
                <li class="nav active" [id]="'IDA' + contadorObjeto.name" ([class.active])="testLocation1() == ('A' + contadorObjeto.name) || '10'">        <a [attr.href]="'#A' + contadorObjeto.name" data-toggle="tab"> Info </a></li>
                <li class="nav"        [id]="'IDB' + contadorObjeto.name" ([class.active])="testLocation1() == 'B' + contadorObjeto.name">                  <a [attr.href]="'#B' + contadorObjeto.name" data-toggle="tab"> Info </a></li>
                <li class="nav"        [id]="'IDC' + contadorObjeto.name" ([class.active])="testLocation1() == 'C' + contadorObjeto.name">                  <a [attr.href]="'#C' + contadorObjeto.name" data-toggle="tab"> Info </a></li>
              </ul>

              <div class="tab-content">

                <div class="tab-pane fade in active" [id]="'A' + contadorObjeto.name">Content inside tab A
                  {{ contadorObjeto.name }}
                </div>

                <div class="tab-pane fade in " [id]="'B' + contadorObjeto.name">Content inside tab B 
                  <a [attr.href]="'#C' + contadorObjeto.name" data-toggle="tab" #elem (click)="testLocationAct(elem.href, 'IDB' + contadorObjeto.name)" >
                      <img class="img-responsive"
                      height = "230" width = "230"
                      src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Free_logo.svg/200px-Free_logo.svg.png" />
                  </a>
                </div>

                <div class="tab-pane fade in " [id]="'C' + contadorObjeto.name">Content inside tab C 
                </div>
              </div>    

            </div>

    testLocation1():string{
      //alert(document.activeElement.toString().split(/#(.+)?/)[1]);
      return document.activeElement.toString().split(/#(.+)?/)[1];
    }

    testLocationAct(test: any, test1: any){

      liNavID = "ID" + test.toString().split(/#(.+)?/)[1];

      document.getElementById(test1).classList.remove('active');
      document.getElementById(liNavID).classList.add('active');

      //console.log(liNavID);
    }

我已经对示例进行了修改,新代码使其看起来与之前的相似。您可以单击选项卡2内的图像进行测试。

希望能帮到你。

【问题讨论】:

  • 你能添加一个plunker吗?我正在尝试侧边栏数据切换,但它不工作
  • @Gary 你可以用 plunker 看更新,希望对你有帮助
  • 谢谢。这应该会有所帮助。
  • 我使用了没有 [id] 的 id 和没有 [attr.href] 的 href,它也适用于导航折叠。它给出了带有 [] 括号的模板的解析错误。谢谢。

标签: twitter-bootstrap angular


【解决方案1】:

我会创建一个包含所有导航元素的数组。 nav 元素将具有 active 属性。

您的导航元素将使用循环创建:

<ul class="nav nav-tabs">
  <li *ngFor="#tab of tabs" class="nav active"
      [ngClass]="{active:tab.active}">
    <a> Info </a></li>
</ul>

当你点击一个导航时你会执行这个方法

selectNav(nav) {
  this.navs.forEach((nav) => {
    nav.active = false;
  });
  nav.active = true;
}

此方法将链接到如下导航元素:

<ul class="nav nav-tabs">
  <li ngFor="#tab of tabs" (...)>
    <a (click)="selectNav(nav)>
      Info
    </a>
  </li>
</ul>

我认为这篇文章可以帮助你:

【讨论】:

  • 答案有点不清楚:(这可能有效,但很难理解
【解决方案2】:

您可以这样做(将"cObj == 'A'" 更改为您需要的任何内容):

<li class="nav" [class.active]="cObj == 'A'"> <a [attr.href]="'#A' + cObj"> Info </a></li>
<li class="nav" [class.active]="cObj == 'B'"> <a [attr.href]="'#B' + cObj"> Info </a></li>

【讨论】:

    【解决方案3】:

    如果使用路由器,设置 .router-link-active 类

    //our root app component
    import {Component} from 'angular2/core'
    import {RouteConfig, ROUTER_DIRECTIVES} from "angular2/router";
    
    @Component({
      template: "<h1>First component</h1>"
    })
    export class FirstComponent { }
    
    
    
    @Component({
      template: "<h1>Second component</h1>"
    })
    export class SecondComponent { }
    
    
    
    @Component({
      template: "<h1>Third component</h1>"
    })
    export class ThirdComponent { }
    
    
    
    @Component({
      selector: 'my-app',
      providers: [],
      template: `
        <div>
        <ul>
          <li>
            <a [routerLink]="['First']">First</a>
          </li>
          <li>
            <a [routerLink]="['Second']">Second</a>
          </li>
          <li>
            <a [routerLink]="['Third']">Third</a>
          </li>
        </ul>
        </div>
        <router-outlet></router-outlet>
      `,
      styles: [".router-link-active { background-color: red; }"],
      directives: [ROUTER_DIRECTIVES]
    })
    @RouteConfig([
        { path: "/first", name: "First", component: FirstComponent, useAsDefault: true },
      { path: "/second", name: "Second", component: SecondComponent },
      { path: "/third", name: "Third", component: ThirdComponent }
    ])
    export class AppComponent { }
    

    完整代码:https://github.com/guyoung/GyPractice-Angular2Advanced/tree/master/apps/router_link_active

    【讨论】:

    • 很好的解决方案。谢谢!
    【解决方案4】:

    您不能拥有动态构建的属性名称。请改用ngClass

    <li ngClass="{'active': isActive}">
    

    另见:
    - https://angular.io/docs/ts/latest/api/common/NgClass-directive.html
    - https://stackoverflow.com/a/33713824/217408

    【讨论】:

      【解决方案5】:
      constructor() { }
        tab: number;
        ngOnInit() {
          this.tab = 1;
        }
      
        selectTab(id){
          this.tab = id;
        }
      
        activeTab(num){
          return this.tab === num;
        }
      
      <ul class="clearfix">
        <li (click)="selectTab(1)" [ngClass]="{active: activeTab(1)}"> 
          <span>Messages</span>
        </li>
      
        <li (click)="selectTab(2)" [ngClass]="{active: activeTab(2)}">  
          <span>Profile</span>
        </li>
      
        <li (click)="selectTab(3)" [ngClass]="{active: activeTab(3)}">  
          <span>Activity</span>
        </li>
      
       </ul>
       <div class="tab-content">
         <div class="animated fadeIn" *ngIf="tab === 1">
           Content 1
         </div>
         <div class="animated fadeIn" *ngIf="tab === 2">
           Content 2
         </div>
         <div class="animated fadeIn" *ngIf="tab === 3"  >
           Content 3
         </div>
      </div>
      

      【讨论】:

      • 你应该解释一下你为什么这么做。请确保代码 sn-ps 确实有效,否则只需将其格式化为 code.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2015-12-14
      相关资源
      最近更新 更多