ホームページ  >  記事  >  ウェブフロントエンド  >  Angularjs で mvvm スタイルのタブを実装するにはどうすればよいですか?ケース+コード

Angularjs で mvvm スタイルのタブを実装するにはどうすればよいですか?ケース+コード

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-08 09:35:531556ブラウズ

タブは現代の Web ページで最も一般的に使用される効果の 1 つであることはわかっています。今回は、Angularjs で mvvm スタイルのタブを実装する方法を説明します。ケース + コード、以下は実際的なケースです。見てみましょう。

この記事の焦点は、非常に人気のある mvvm フレームワークである angularjs を使用してタブ効果を実現することです。その前に、一般的に使用される jquery 実装を削除しましょう。

1. jquery はシンプルで粗雑なタブ効果を実装します

var nav = $(".tabs");//tab切换var box = $(".box");//容器nav.on("click", function(){ //点击事件
  var this_index=$(this).index();
  $(this).addClass("active").siblings().removeClass("active");
  box.eq(this_index).show().siblings().hide();
});

ここでは js のコア部分のみを示し、html と css については詳しく説明しません。
上記のコードは、クリックイベントを使用してelem.index()を取得し、インデックスとコンテナを接続して表示と非表示を制御するタブ効果を単純かつ大雑把に実装しています。

2. Angularjs は単純なタブ効果を実装します

Html 部分

<section ng-app="myApp">
       <div class="tabs tabs-style" ng-controller="TabController as tab">
         <nav>
           <ul>
             <li ng-class="{&#39;current&#39;:tab.isSet(1)}">
               <a href="#" ng-click="tab.setCurrent(1)"><span>Home</span></a></li>
             <li ng-class="{&#39;current&#39;:tab.isSet(2)}">
               <a href="#" ng-click="tab.setCurrent(2)"><span>Work</span></a></li>
             <li ng-class="{&#39;current&#39;:tab.isSet(3)}">
               <a href="#" ng-click="tab.setCurrent(3)"><span>Blog</span></a></li>
             <li ng-class="{&#39;current&#39;:tab.isSet(4)}">
               <a href="#" ng-click="tab.setCurrent(4)"><span>About</span></a></li>
             <li ng-class="{&#39;current&#39;:tab.isSet(5)}">
               <a href="#" ng-click="tab.setCurrent(5)"><span>Contact</span></a></li>
           </ul>
         </nav>
         <div class="content">
           <section id="section-1"  ng-show="tab.isSet(1)">
             <p>1</p>
           </section>
           <section id="section-2"  ng-show="tab.isSet(2)">
             <p>2</p>
           </section>
           <section id="section-3" ng-show="tab.isSet(3)">
             <p>3</p>
           </section>
           <section id="section-4" ng-show="tab.isSet(4)">
             <p>4</p>
           </section>
           <section id="section-5" ng-show="tab.isSet(5)">
             <p>5</p>
           </section>
         </div>
       </div>
   </section>

css 部分 (ここでは便宜上 Less 構文を使用しています。子供たちは CSS をカスタマイズしてパーソナライズされた効果を実現できます)

* {  margin: 0;  padding: 0;
}body {  background: #e7ecea;  font-weight: 600;  font-family: &#39;Raleway&#39;, Arial, sans-serif;  text-align: center;
}a {    color: #2CC185;    text-decoration: none;    outline: none;
  
    &:hover {    color: #74777b;
    }
}.tabs {  position: relative;  width: 100%;  margin: 30px auto 0 auto;
  nav {
    ul {      position: relative;      display: flex;      max-width: 1200px;      margin: 0 auto;      list-style: none;      flex-flow: row wrap;      justify-content: center;
      
        li {          flex: 1;
          
          &.current a {            color: #74777b;
          }
        }
      }
    }  
    a {      display: block;      position: relative;      overflow : hidden;      line-height: 2.5;
      
      span {        vertical-align: middle;        font-size: 1.5em;
      }
    }
}.content {  position: relative; 
  
  section {    /* display: none; */
    margin: 0 auto;    max-width: 1200px;
    &.content-current {      /* display: block; */
    }    
    p {      color: rgba(40,44,42, 0.4);      margin: 0;      padding: 1.75em 0;      font-weight: 900;      font-size: 5em;      line-height: 1;
    }
  }
}.tabs-style {
  nav {    /* background: rgba(255,255,255,0.4); */
    
    ul li {
      a {        overflow: visible; 
        border-bottom: 1px solid rgba(0,0,0,0.2);        -webkit-transition: color 0.2s;        transition: color 0.2s;
      }
    }    
    ul li.current a{
      &:after, &:before {        content: &#39;&#39;;        position: absolute;        top: 100%;        left: 50%;        width: 0;        height: 0;        border: solid transparent;
        }
      &:after {        margin-left: -10px;        border-width: 10px;        border-top-color: #e7ecea;
      }
      &:before {        margin-left: -11px;        border-width: 11px;        border-top-color: rgba(0,0,0,0.2);
      }
    }
  }
}

js 部分

angular.module(&#39;myApp&#39;, [])
  .controller(&#39;TabController&#39;, function() {    this.current = 1;  
  this.setCurrent = function (tab) {    this.current = tab;
  };  
  this.isSet = function(tab) {    return this.current == tab;
  };
});

最後の効果図に示すように、

Angularjs で mvvm スタイルのタブを実装するにはどうすればよいですか?ケース+コード

上記のコードを通じて、実装の中核は angularjs に組み込まれている ng-class、ng-click、ng-show 命令であることがわかります。平たく言えば、現在のデータのデフォルト値はコントローラーで 1 として定義されています。 ng-click は、現在のデータを変更するためのクリック イベント カスタム関数 を提供します。 ng-class は、 の値を取得することで、現在選択されているインデックスに条件をバインドします。 current. 現在のスタイルを追加すると、コンテナーもコントローラー内の現在のデータを取得し、ng-show コントロールを通じてそれを表示および非表示にします。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

関連記事:

異なるバージョンの vscdoe で異なるバージョンの Nodejs をデバッグする方法

Vuejs WebP は画像のプラグイン開発をサポートしています

以上がAngularjs で mvvm スタイルのタブを実装するにはどうすればよいですか?ケース+コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。