This sample shows how to keep a top level model that states what blocks/ panels to display on the screen.
There are 2 different samples:
- Using directives for each panel
- Using ng-show
http://plnkr.co/edit/d0Dq94?p=preview
This sample shows how to keep a top level model that states what blocks/ panels to display on the screen.
There are 2 different samples:
http://plnkr.co/edit/d0Dq94?p=preview
var app = angular.module('myApp', []); | |
app.controller('MainCtrl', function ($scope) { | |
$scope.windows = { top: true, left:false, center:true, right: true}; | |
$scope.toggleall = function(state){ | |
$scope.windows.top = state; | |
$scope.windows.left = state; | |
$scope.windows.center = state; | |
$scope.windows.right = state; | |
} | |
}); | |
app.directive('toggler', function() { | |
var tpl ='<button ng-click="toggle()" ng-transclude></button>'; | |
return { | |
restrict: "A", | |
template: tpl, | |
transclude: true, | |
replace: true, | |
scope: { | |
isVisible: '=toggler' | |
}, | |
controller: function ($scope) { | |
$scope.toggle = function() { | |
$scope.isVisible = !$scope.isVisible; | |
} | |
} | |
} | |
}); | |
app.directive('viewpanel', function() { | |
return { | |
restrict: "A", | |
scope: { | |
isVisible: '=viewpanel' | |
}, | |
link: function (scope, el, attrs) { | |
scope.$watch('isVisible', function (value, oldvalue) { | |
if (value) { | |
el.removeClass('hidden'); | |
} else { | |
el.addClass('hidden') | |
} | |
}); | |
} | |
} | |
}); |
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8" /> | |
<title>AngularJS Plunker</title> | |
<script> | |
document.write('<base href="' + document.location + '" />'); | |
</script> | |
<link rel="stylesheet" href="style.css" /> | |
<script data-require="[email protected]" src="http://code.angularjs.org/1.2.12/angular.js" data-semver="1.2.12"></script> | |
<script src="app.js"></script> | |
</head> | |
<body ng-app="myApp" ng-controller="MainCtrl"> | |
<h3>Panels getting toggled via the model (Showing status)</h3> | |
<div toggler="windows.top" ng-class="{active: !windows.top}">top</div> | |
<div toggler="windows.left" ng-class="{active: !windows.left}">left</div> | |
<div toggler="windows.center" ng-class="{active: !windows.center}">center</div> | |
<div toggler="windows.right" ng-class="{active: !windows.right}">right</div> | |
<button ng-click="toggleall(false)">Hide All</button> | |
<button ng-click="toggleall(true)">Show All</button> | |
<hr /> | |
<h4>Using a custom directive to change state (shown in red instead of hiding)</h4> | |
<div viewpanel="windows.top">Top</div> | |
<div viewpanel="windows.left">left</div> | |
<div viewpanel="windows.center">center</div> | |
<div viewpanel="windows.right">right</div> | |
<h4>Same model property but using ng-show</h4> | |
<hr /> | |
<div ng-show="windows.top">top</div> | |
<div ng-show="windows.left">left</div> | |
<div ng-show="windows.center">center</div> | |
<div ng-show="windows.right">right</div> | |
</body> | |
</html> |
/* Put your css in here */ | |
body { | |
font-family: Arial; | |
font-size:12px; | |
} | |
.active { | |
opacity: .6; | |
} | |
.hidden { | |
opacity: .3; | |
} | |
div { | |
display: block; | |
float: left; | |
margin: 10px 2px; | |
border: 1px solid #ccc; | |
padding: 28px; | |
height: 53px; | |
-webkit-transition: all 1s ease-in-out; | |
-moz-transition: all 1s ease-in-out; | |
-o-transition: all 1s ease-in-out; | |
transition: all 1s ease-in-out; | |
} | |
h4 { | |
display:block; | |
float:none; | |
clear:both; | |
font-size:10px; | |
color:#555; | |
} |