2013-03-06 3 views
6

Во-первых, да, я пробовал поиск по Google, но до сих пор сложно найти информацию об AngularJS.AngularJS, эквивалентный jQuery toggle показать/скрыть раздел

Я хочу создать простую задачу открытия разделов на основе того, какая кнопка нажата в форме. Я хочу, чтобы только один раздел был открыт в любое время и, возможно, по умолчанию (не решил). Было бы неплохо, если кнопка, которую вы нажмете, будет классифицирована как «btn-primary» для начальной загрузки. Так что это HTML

<form> 
    <input type="button" id="show-section1" value="Section 1" /> 
    <input type="button" id="show-section2" value="Section 2" /> 
    <input type="button" id="show-section3" value="Section 3" /> 
</form> 
<section id="section1">blah</section> 
<section id="section2">blah2</section> 
<section id="section3">blah3</section> 

В JQuery я хотел бы сделать что-то вроде этого (упрощенный и не самое лучшее решение, просто объяснить):

$('section').hide(); 
$('#show-section1').click(function() { 
    $('section').hide(); 
    $('#section1').show(); 
}); 
etc 

Я сделал это однажды, но я могу» Не помню, как, я помню, это было очень немного строк кода.

ответ

7

Если вам просто нужно один в время, вы можете использовать это: http://jsfiddle.net/jHhMv/3/

JS:

'use strict'; 

var App=angular.module('myApp',[]); 

function Ctrl($scope){ 
    var section = 1; 

    $scope.section = function (id) { 
     section = id; 
    }; 

    $scope.is = function (id) { 
     return section == id; 
    }; 
} 

HTML:

<div ng-controller="Ctrl"> 
<form> 
    <input type="button" id="show-section1" value="Section 1" ng-click="section(1)" ng-class="{'btn-primary': is(1)}" /> 
    <input type="button" id="show-section2" value="Section 2" ng-click="section(2)" ng-class="{'btn-primary': is(2)}" /> 
    <input type="button" id="show-section3" value="Section 3" ng-click="section(3)" ng-class="{'btn-primary': is(3)}" /> 
</form> 
<section id="section1" ng-show="is(1)">blah</section> 
<section id="section2" ng-show="is(2)">blah2</section> 
<section id="section3" ng-show="is(3)">blah3</section> 
</div> 
+0

Где вы определяете 'myApp'? : S – OZZIE

+0

Это просто имя модуля. Вы можете поставить «OZZIE» там, если хотите – Ven

+0

+1, мне нравится это решение, потому что оно также работает с динамическим HTML, как в моем сценарии. Иды в моем случае генерируются «на лету» и не могут быть жестко закодированы в html. Благодаря! – Vaibhav

6

гляньте http://jsfiddle.net/mahbub/jHhMv/

<div ng-controller="Ctrl"> 
<form> 
    <input type="button" id="show-section1" value="Section 1" ng-click="section1=!section1" /> 
    <input type="button" id="show-section2" value="Section 2" ng-click="section2=!section2" /> 
    <input type="button" id="show-section3" value="Section 3" ng-click="section3=!section3" /> 
</form> 
<section id="section1" ng-show="section1">blah</section> 
<section id="section2" ng-show="section2">blah2</section> 
<section id="section3" ng-show="section3">blah3</section> 
</div> 


'use strict'; 

var App=angular.module('myApp',[]); 

function Ctrl($scope){ 

} 
+0

Это просто демонстрация о шоу для шкурой. Для вашего случая Угловая не совсем нужна ИМХО. – Mahbub

+1

OP: «Я хочу, чтобы только один раздел был открыт в любое время». Ваше решение позволяет сразу несколько открывать несколько. –

3

много способов. Один из них (с помощью AngularUI):

HTML:

<div ng-controller="AppController"> 

    <button ng-click="setActive('section1')" ng-class="{'btn btn-primary': active.section1}">Section 1</button> 
    <button ng-click="setActive('section2')" ng-class="{'btn btn-primary': active.section2}">Section 2</button> 
    <button ng-click="setActive('section3')" ng-class="{'btn btn-primary': active.section3}">Section 3</button> 

    <section id="section1" ui-toggle="active.section1">blah</section> 
    <section id="section2" ui-toggle="active.section2">blah2</section> 
    <section id="section3" ui-toggle="active.section3">blah3</section> 

</div> 

CSS:

.ui-show { 
    opacity: 1; 
    transition: all 0.5s ease; 
} 
.ui-hide { 
    opacity: 0; 
    transition: all 0.5s ease; 
} 

JS:

app.controller('AppController', 
    function($scope) { 
    $scope.active = {section1: true}; 
    $scope.setActive = function(section){ 
     $scope.active = {}; 
     $scope.active[section] = true; 
    }; 
    } 
); 

Plunker

+0

Все, что я получаю, это: «Ошибка: аргумент« AppController »не является функцией, получившей неопределенный» – OZZIE

+0

Что должно быть «var app = angular.module (« plunker », ['ui']),' 'be? Другой ответ здесь использует «myApp», но где я это устанавливаю? У меня есть : S – OZZIE

+0

Итак, я создал пустую диспетчерскую функцию '' AppController ($ scope) {} '' Я предположил .. – OZZIE