AngularJS – Tab 介紹篇

為了方便文章閱讀,本篇將Tab翻譯成頁籤

這個案例的複雜度會比較前面高一些,因為它不僅僅是使用我們一直提到的AngularJS,為了要製作頁面上面的一些互動效果,還加入了Bootstrape這個通常被用來當RWD的框架,不過也僅僅是套用了幾個類別,所以大家也不用太擔心,接下來我們先看一下這個案例最後希望要達成的效果頁面

在看過了目標頁面後,我們先來了解一下需要怎麼樣架構我們的HTML,首先是CSS和Javascript的引入,分別是AngularJS、jQuery、Bootstrap CSS以及Javascript:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
<script src="https://code.jquery.com/jquery.min.js"></script>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>

在HTML文件中,必須有項目清單標籤ul、li,而在ul標籤中需套用nav nav-pills這兩個css類別,這兩個類別是由Bootstrape的css所提供的,li標籤是包覆著超連結的a標籤,下圖案例是希望可以產生三個頁籤。

AngularJS Part5 Slide1
AngularJS Part5 Slide1

在a標籤中加入ng-click=”tab = 1″、ng-click=”tab = 2″、ng-click=”tab = 3″去設定當使用者按下連結後tab變數會隨著變化,另外為了方便觀察是否成功,在頁面上利用表達式將tab變數顯示出來。

AngularJS Part5 Slide1
AngularJS Part5 Slide2

若一切順利,在我們按下不同的頁籤連結時,畫面上應該會有數字上面的變化。

AngularJS Part5 Slide3
AngularJS Part5 Slide3
AngularJS Part5 Slide4
AngularJS Part5 Slide4

接下來開始製作點選頁籤後的內容頁面,同樣的內容頁面也應該有三個才對,在HTML中產生三個div,其中套用Bootstrape所提供的CSS panel類別,div的內容部分可依照需求置入。

AngularJS Part5 Slide5
AngularJS Part5 Slide5

在div中利用ng-show去判斷tab變數的值來切換顯示。

AngularJS Part5 Slide6
AngularJS Part5 Slide6

完成後,在我們點選不同的連結時,內容的部分也應該會隨著變動。

AngularJS Part5 Slide7
AngularJS Part5 Slide7

接下來我們在section標籤中設定ng-init=”tab=1″的屬性來決定tab變數的初始值。

AngularJS Part5 Slide8
AngularJS Part5 Slide8

接下來在li內新增ng-class的屬性,依tab變數的值來切換active的CSS屬性(該屬性由Bootstrape提供樣式),其中三個連續的等號是判斷該變數與值完全相同的意思。

AngularJS Part5 Slide9
AngularJS Part5 Slide9

這個動作的目的是希望當網友點選之後,可以如下圖所示,清楚的標示目前頁面上所顯示的是第幾個項目。

AngularJS Part5 Slide10
AngularJS Part5 Slide10

到目前為止,大概就完成了我們希望呈現的頁籤效果,大家可以透過JS Bin來測試看看到目前為止的程式碼。

<!DOCTYPE html>
<html ng-app>
<head>
<meta name="description" content="AngularJS Tabs Example 1">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
<script src="//code.jquery.com/jquery.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
  <meta charset="utf-8">
  <title>AngularJS Tabs Example 1</title>
</head>
<body>
  <section ng-init="tab=1">
    
    <ul class="nav nav-pills">
      <li ng-class="{ active: tab===1 }">
        <a href="" ng-click="tab=1">滑鼠墊</a>
      </li>
      <li ng-class="{ active: tab===2 }">
        <a href="" ng-click="tab=2">馬克杯</a>
      </li>
      <li ng-class="{ active: tab===3 }">
        <a href="" ng-click="tab=3">杯墊</a>
      </li>
    </ul>
    
    <div class="panel" ng-show="tab===1">
      <h4>馬老師雲端研究室 滑鼠墊</h4>
      <p>產品介紹...</p>
    </div>
    <div class="panel" ng-show="tab===2">
      <h4>馬老師雲端研究室 馬克杯</h4>
      <p>產品介紹...</p>
    </div>
    <div class="panel" ng-show="tab===3">
      <h4>馬老師雲端研究室 杯墊</h4>
      <p>產品介紹...</p>
    </div>
  
  </section>
</body>
</html>

在看完了上面的案例之後,我們可以觀察到程式邏輯判斷的部分都是直接撰寫在HTML頁面上,那如果我們要把邏輯判斷的部分從HTML拆開寫到Javascript檔又應該要如何處理呢?首先,不用說的當然是必須要有應用程式的建立以及控制器囉!下圖中我們開始新增控制器,並且在section標籤中,輸入ng-controller=”panelController as panel”的屬性,相信在看了前幾篇教學的同學們對於這樣的項目是再熟悉不過了!接下來在控制器中,決定tab變數的初始值,就可以把原來的ng-init屬性刪除了。

AngularJS Part5 Slide11
AngularJS Part5 Slide11

在ng-click後去執行控制器中的selectTab函數,並且針對該函數帶入不同的值,利用帶入的值來改變tab變數值。

AngularJS Part5 Slide12
AngularJS Part5 Slide12

在ng-click後去執行控制器中的isSelected函數,也帶出不同的值給函數,讓函數可以回傳tab===1或2、3這樣的內容給ng-show使用。

AngularJS Part5 Slide13
AngularJS Part5 Slide13

這樣一來我們邏輯判斷的部分就會和網頁內容有所區隔,大家也可以透過JS Bin來測試這樣的程式結構。

<!DOCTYPE html>
<html ng-app="store">
<head>
<meta name="description" content="AngularJS Tabs Example 2">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
<script src="//code.jquery.com/jquery.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
  <meta charset="utf-8">
  <title>AngularJS Tabs Example 2</title>
</head>
<body>
  <section ng-controller="PanelController as panel">
    <ul class="nav nav-pills">
      <li ng-class="{ active: panel.isSelected(1) }">
        <a href="" ng-click="panel.selectTab(1)">滑鼠墊</a>
      </li>
      <li ng-class="{ active: panel.isSelected(2) }">
        <a href="" ng-click="panel.selectTab(2)">馬克杯</a>
      </li>
      <li ng-class="{ active: panel.isSelected(3) }">
        <a href="" ng-click="panel.selectTab(3)">杯墊</a>
      </li>
    </ul>
    <div class="panel" ng-show="panel.isSelected(1)">
      <h4>馬老師雲端研究室 滑鼠墊</h4>
      <p>產品介紹...</p>
    </div>
    <div class="panel" ng-show="panel.isSelected(2)">
      <h4>馬老師雲端研究室 馬克杯</h4>
      <p>產品介紹...</p>
    </div>
    <div class="panel" ng-show="panel.isSelected(3)">
      <h4>馬老師雲端研究室 杯墊</h4>
      <p>產品介紹...</p>
    </div>
  </section>
</body>
</html>
(function(){
  var app = angular.module('store', []);
  
  app.controller('PanelController', function(){
    this.tab = 1;
    
    this.selectTab = function(setTab){
      this.tab = setTab;
    };

    this.isSelected = function(checkTab){
      return this.tab === checkTab;
    };
  });
  
})();

You may also like...

50,793 Responses

  1. TerryHax表示:

    Инвестиционная компания HERMES: имитация скама по заданию следствия

    В Санкт-Петербурге, возможно, близится к завершению предварительное расследование уголовного дела о мошенничестве, инициированного ГСУ питерского главка МВД по якобы обнаружившимся фактам мошенничества в работе иностранной инвестиционной компании Hermes. Следствие признало потерпевшими 198 граждан — клиентов Hermes. В числе обвиняемых — Роман Василенко, по версии следствия, один из соучредителей компании.

    Следствие также пытается привлечь к делу кооператив «Бест Вей», заблокировав его деятельность и активы для оплаты обязательств лицам, названным потерпевшими, на том основании, что Василенко являлся руководителем кооператива и другие организации, которые Роман Василенко действительно возглавлял.

    Василенко действительно был председателем правления кооператива до февраля 2021 года, а с февраля 2021 года по март 2022-го — председателем совета кооператива — коллегиального наблюдательного органа, не руководящего операционной деятельностью кооператива в связи с тем, что по семейным обстоятельствам месяцами находился за границей. С весны 2021 года он не занимает никаких должностей в кооперативе.
    Василенко — не соучредитель и не гендиректор Hermes
    При этом наше журналистское расследование выяснило, что учредителем, совладельцем или генеральным директором Hermes Василенко никогда не был: утверждения следствия не соответствуют действительности.

    Hermes — компания полностью иностранная, зарегистрированная в британской юрисдикции. Она начала работать на рынке в 1998 года — гораздо раньше, чем были созданы кооператив «Бест Вей», а также продвиженческий, консультативный и образовательный проекты, организованные Романом Василенко.

    Россиян среди учредителей Hermes нет и не было. Генеральным партнером компании, насколько нам известно, является австрийский инвестор Йохан Риглер. При этом компания активно работала в странах СНГ, имеет десятки тысяч клиентов из России и других стран постсоветского пространства.

    Клиентов привлекало то, что она подчиняется британскому праву и соответствует международным стандартам инвестиционной деятельности. Огромное количество клиентов довольно пассивным доходом, который получало (а после восстановления работы компании и получает) с помощью компании — располагаем сотнями позитивных отзывов, десятки из которых их авторы нам подтвердили лично.

    Hermes сотрудничала с российскими специалистами по продвижению, с Романом Василенко, как с бизнес-коучем. При этом она активно привлекала российских IT-специалистов как лучших в мире. На Hermes работал петербургский IT-специалист Набойченко.

    Преступление совершили силовики, а не Hermes
    Как нам стало известно, петербургские полицейские задержали и запугали Набойченко, а потом выпустили, для того чтобы он действовал по их заданию. Набойченко обрушил все сайты Hermes, создав видимость скама этой компании, и выступил с громкими публичными разоблачениями.

    В результате захвата и обрушения сайтов операции по счетам и вывод денег со счетов оказались невозможны — и появились заявления в полицию со стороны клиентов инвесткомпании. Часть из них, по имеющимся у нас данным, была в сговоре со следствием, однако часть поверила в то, что произошел обман и деньги иным способом, кроме как через привлечение к ответственности за мошенничество, не вернуть. При этом большинство клиентов компании из России таких заявлений не подавало, будучи уверенным в том, что кризисная ситуация успешно разрешится.

    Кроме того, с разоблачениями выступил шофер одного из проектов Романа Василенко по фамилии Комаров. Человек, работавший за зарплату 100 тыс. в месяц заявил следствию, что якобы возил неучтенные наличные деньги, хотя в действительно он выполнял мелкие поручения, в частности ездил в аэропорт, забирал пакеты с подарками от пайщиков кооператива подарков, присылаемых из регионов, дал показания (якобы сам), что в пакетах с подарками, находилась неучтенная наличка — хотя признает, что их не вскрывал.

    Липовое уголовное дело
    Вот на этом зыбком основании и искусственном обрушении инфраструктуры Hermes появилось уголовное дело. К этому делу привязали, в том числе, и кооператив «Бест Вей», активы которого следствие стремится использовать для расплаты по обязательствам Hermes, поскольку они находятся в России.

    Это, как сообщили нам юридические эксперты, незаконно, но кооператив пытаются привязать квазизаконными способами, один из которых — как раз утверждение, что ранее руководивший кооперативом Роман Василенко являлся якобы совладельцем Hermes и проекты Романа Василенко и Hermes составляли вместе некий единый холдинг — машину для хищений.

    Кризис преодолен
    На восстановление работы сайтов Hermes и электронных финансовых сервисов IT-специалистами за рубежом понадобилось несколько месяцев. Сейчас, как нам сообщили клиенты компании, сайты и платежные сервисы восстановлены, все счета действуют.

    Более 70% клиентов Hermes уже воспользовалось восстановленными счетами и свободно оперирует своими средствами, в том числе выводят их. Сложная ситуация в работе компании, созданная ее бывшим ключевым сотрудником по наущению оперативных работников полиции, полностью преодолена.

    Преимущество компании Hermes оказалось как раз в том, что она находится за границей и ее деятельность не могут заблокировать российские правоохранительные органы.

    Что же касается кооператива «Бест Вей», то его деятельность пока заблокирована, хотя он прошел бухгалтерскую экспертизу в одном из учреждений Минюста России, которая выяснила, что 81% средств направлялся на покупку квартиры и 19% средств — на организацию деятельности и услуги для кооператива.

    Режиссеры псевдоскама
    Уголовное дело изначально срежиссировано петербургскими оперативниками и следователями Машевским, Сапетовой, Винокуровым и их начальником — главой ГСУ питерского главка МВД генерал-майора юстиции Негрозовым. Цель атаки, возможно, в том, чтобы захватить активы кооператива в интересах группы недобросовестных инвесторов Hermes.

    Винокуров и Негрозов, вводя в заблуждение главу МВД Владимира Колокольцева, заявили, что вскрыли мошенническую схему всероссийского масштаба и обнаружили преступную группировку.

    В то время как они сами — преступная группировка, фабрикующая уголовные дела против честных людей и уничтожающая организации, которые работают в интересах повышения материального благосостояния тысяч граждан России.

  2. Having read this I believed it was really enlightening. I appreciate you finding the time and energy to put this article together. I once again find myself personally spending a lot of time both reading and commenting. But so what, it was still worthwhile!

  3. Leonardpar表示:

    https://edpillpharmacy.store/# erectile dysfunction medicine online

  4. DouglasGed表示:

    buy ed medication online: cheap ed pills online – online ed drugs

  5. AoolHesia表示:

    Because she has always had a weight problem, I started her on Beneful six weeks ago — thinking it would be healthier than the table scraps in the long run.
    Purchase medications at our online drugstore at ampicillin dose child pills at the lowest prices online
    Research Methods and ProceduresSampleThe data used in this report derive from an ongoinglongitudinal study of mental and physical health in twinsfrom the Norwegian Institute of Public Health Twin Panel,a population-based twin registry 12.

  6. filmonlinevmx表示:

    Дэдпул и Росомаха 2024 https://bit.ly/2024-video-film-dedpul

  7. DouglasGed表示:

    ed medications cost: Best ED pills non prescription – ed rx online

  8. AxxzPaish表示:

    I miss my little Maggs so much olayak Our 11.
    can be a great benefit.There are many advantages when you prednisone and pregnancy through the internet with a prescription.
    For over twenty years our program has been conducting high quality, clinically valuable research into the biology and treatment of mood and anxiety disorders.

  9. Leonardpar表示:

    https://mexicopharmacy.win/# mexican drugstore online

  10. Отличный сайт! Всем рекомендую!заказать вывеску тюмень

  11. AujikHesia表示:

    Clinical Neurophysiology Neurology Find a physician at another Johns Hopkins Member Hospital: Howard County General Sibley Memorial Hospital Suburban Hospital Connect with a Treatment Center Neuroimmunology and Neurological Infections Cerebrospinal Fluid Disorders Center Charcot-Marie-Tooth Center Neurofibromatosis Center Neurology and Neurosurgery Find Additional Treatment Centers at: Howard County General Sibley Memorial Hospital Suburban Hospital Maryland Patients Find a location near you.
    More offers at glucophage bnf because it is powerful medication
    Your bleeding should slow down after you pass the pregnancy.

  12. 78win表示:

    I truly love your blog.. Excellent colors & theme. Did you develop this amazing site yourself? Please reply back as I’m looking to create my own personal website and would love to learn where you got this from or just what the theme is called. Appreciate it!

  13. DouglasGed表示:

    buy medicines online in india: Indian pharmacy online – pharmacy website india

  14. Leonardpar表示:

    https://mexicopharmacy.win/# reputable mexican pharmacies online

  15. Mcyrcb表示:

    how to get lactulose without a prescription – buy brahmi generic betahistine 16 mg uk

  16. Zita表示:

    my website; Find top-rated certified Daycares in your area [Zita]

  17. Wguuonert表示:

    How many different types of brain tumors are there?
    Discreet shipping, fantastic prices. Order lyrica vs gabapentin for nerve pain , share feedback.
    Though it is more prevalent in men, studies have shown that women are more likely to present more advanced tumors and have a worse prognosis than men at almost every stage of the disease.

  18. Do you mind if I quote a couple of your articles as long as I provide credit and sources back to your website? My website is in the very same area of interest as yours and my users would really benefit from a lot of the information you provide here. Please let me know if this okay with you. Thanks!

  19. Отличный сайт! Всем рекомендую!заказать вывеску тюмень

  20. DouglasGed表示:

    ed drugs online: Best ED pills non prescription – buy ed pills online

  21. I’d like to thank you for the efforts you’ve put in penning this site. I really hope to view the same high-grade blog posts by you later on as well. In fact, your creative writing abilities has motivated me to get my own, personal blog now 😉

  22. Yuimqp表示:

    cyclosporine uk – buy colcrys sale colcrys over the counter

  23. DouglasGed表示:

    mexican border pharmacies shipping to usa: Purple pharmacy online ordering – mexican pharmaceuticals online

  24. Aw, this was a very nice post. Spending some time and actual effort to produce a top notch article… but what can I say… I put things off a lot and never manage to get anything done.

  25. Poker casino表示:

    Feel free to visit my web page: Poker casino

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。