AngularJS - Controller As
How do I make an angularjs - controller as?
I wrote a simple guide to understand better the "Controller as" method, just for angular beginners!. What is a angularjs - controller as? How do you make a angularjs - controller as? This script and codes were developed by Lorenzo D'Ianni on 29 September 2022, Thursday.
AngularJS - Controller As - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>AngularJS - Controller As</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"> <link rel="stylesheet" href="css/style.css">
</head>
<body> <div ng-app="MyApp"> <h1>AngularJS<br>Controller as</h1> <div class="container"> <div class="explain"> <div class="explain-title">$scope could be a problem, why?</div> <div class="explain-content"> <p>Each controller has his own $scope.title, but what if we want to retrieve a title from a parent controller?</p> <pre ng-non-bindable><code><div class="box" ng-controller="MainCtrl"> <div class="box-title">MainCtrl</div> <div class="box-title--bind">{{title}}</div> <div class="box" ng-controller="SecondCtrl"> <div class="box-title">SecondCtrl</div> <div class="box-title--bind">{{title}}</div> <div class="box-title--bind">{{title}}</div> <div class="box" ng-controller="ThirdCtrl"> <div class="box-title">ThirdCtrl</div> <div class="box-title--bind">{{title}}</div> <div class="box-title--bind">{{title}}</div> <div class="box-title--bind">{{title}}</div> </div> <c><!-- // ThirdCtrl --></c> </div> <c><!-- // SecondCtrl --></c>
</div> <c><!-- // MainCtrl --></c> </code></pre> </div> </div> <div class="box" ng-controller="MainCtrl"> <div class="box-title">MainCtrl</div> <div class="box-title--bind">{{title}}</div> <div class="box" ng-controller="SecondCtrl"> <div class="box-title">SecondCtrl</div> <div class="box-title--bind">{{title}}</div> <div class="box-title--bind">{{title}}</div> <div class="box" ng-controller="ThirdCtrl"> <div class="box-title">ThirdCtrl</div> <div class="box-title--bind">{{title}}</div> <div class="box-title--bind">{{title}}</div> <div class="box-title--bind">{{title}}</div> </div> </div> </div> </div> <div class="container"> <div class="explain"> <div class="explain-title">Dirty solution: $scope and $parent.$scope</div> <div class="explain-content"> <p> Is $parent.$scope a solution? Yes and no at the same time. Can you image it with 4, 5 or 6 nested controllers with a lot of tags and nested tags? It is impossible to figure out which is the controller that refers to that particular $scope or $parent.$scope. </p> <pre ng-non-bindable><code>
<div class="box" ng-controller="MainCtrl"> <div class="box-title">MainCtrl</div> <div class="box-title--bind">{{title}}</div> <div class="box" ng-controller="SecondCtrl"> <div class="box-title">SecondCtrl</div> <div class="box-title--bind">{{$parent.title}}</div> <div class="box-title--bind">{{title}}</div> <div class="box" ng-controller="ThirdCtrl"> <div class="box-title">ThirdCtrl</div> <div class="box-title--bind">{{$parent.$parent.title}}</div> <div class="box-title--bind">{{$parent.title}}</div> <div class="box-title--bind">{{title}}</div> </div> <c><!-- // ThirdCtrl --></c> </div> <c><!-- // SecondCtrl --></c>
</div> <c><!-- // MainCtrl --></c> </code></pre> </div> </div> <div class="box" ng-controller="MainCtrl"> <div class="box-title">MainCtrl</div> <div class="box-title--bind">{{title}}</div> <div class="box" ng-controller="SecondCtrl"> <div class="box-title">SecondCtrl</div> <div class="box-title--bind">{{$parent.title}}</div> <div class="box-title--bind">{{title}}</div> <div class="box" ng-controller="ThirdCtrl"> <div class="box-title">ThirdCtrl</div> <div class="box-title--bind">{{$parent.$parent.title}}</div> <div class="box-title--bind">{{$parent.title}}</div> <div class="box-title--bind">{{title}}</div> </div> </div> </div> </div> <div class="container"> <div class="explain" ng-init="tab = 1"> <div class="explain-title">Perfect solution: Controller as</div> <div class="explain-content"> <p>You have to declare "Controller as ctrl" and also in your .js use "this" instead $scope to bind the view/model! Save your time without search the parent controller, write immediately what you need, it's easy and fast.</p> <nav class="tabs-triggers"> <a href="#!" class="tab-trigger" ng-click="tab = 1" ng-class="{'is-active': tab === 1}">HTML</a> <a href="#!" class="tab-trigger" ng-click="tab = 2" ng-class="{'is-active': tab === 2}">Javascript</a> </nav> <div ng-show="tab === 1"> <pre ng-non-bindable><code>
<div class="box" ng-controller="MainCtrl <b>as main</b> "> <div class="box-title">MainCtrl</div> <div class="box-title--bind">{{<u>main</u>.title}}</div> <div class="box" ng-controller="SecondCtrl <b>as second</b> "> <div class="box-title">SecondCtrl</div> <div class="box-title--bind">{{<u>main</u>.title}}</div> <div class="box-title--bind">{{<u>second</u>.title}}</div> <div class="box" ng-controller="ThirdCtrl <b>as third</b> "> <div class="box-title">ThirdCtrl</div> <div class="box-title--bind">{{<u>main</u>.title}}</div> <div class="box-title--bind">{{<u>second</u>.title}}</div> <div class="box-title--bind">{{<u>third</u>.title}}</div> </div> <c><!-- // ThirdCtrl --></c> </div> <c><!-- // SecondCtrl --></c>
</div> <c><!-- // MainCtrl --></c> </code></pre> </div> <div ng-show="tab === 2"> <pre ng-non-bindable><code>
angular .module('MyApp', []) .controller('MainCtrl', [function MainCtrl(){ var main = this; main.title = "Main Ctrl Title" }]) .controller('SecondCtrl', [function SecondCtrl(){ var second = this; second.title = "Second Ctrl Title" }]) .controller('ThirdCtrl', [function ThirdCtrl(){ var third = this; third.title = "Third Ctrl Title" }]); </code></pre> </div> </div> </div> <div class="box" ng-controller="MainCtrl as main"> <div class="box-title">MainCtrl</div> <div class="box-title--bind">{{main.title}}</div> <div class="box" ng-controller="SecondCtrl as second"> <div class="box-title">SecondCtrl</div> <div class="box-title--bind">{{main.title}}</div> <div class="box-title--bind">{{second.title}}</div> <div class="box" ng-controller="ThirdCtrl as third"> <div class="box-title">ThirdCtrl</div> <div class="box-title--bind">{{main.title}}</div> <div class="box-title--bind">{{second.title}}</div> <div class="box-title--bind">{{third.title}}</div> </div> </div> </div> </div> <h2>Lorenzo D'Ianni</h2>
</div> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/highlight.min.js"></script> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/styles/googlecode.min.css">
<script>hljs.initHighlightingOnLoad();</script> <script src="js/index.js"></script>
</body>
</html>
AngularJS - Controller As - Script Codes CSS Codes
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500);
*, *:before, *:after { margin: 0; padding: 0; -webkit-overflow-scrolling: touch; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; box-sizing: border-box;
}
body { font-family: 'Roboto', sans-serif; font-weight: 400; font-size: 14px; margin: 0 auto; padding: 32px 5%; border-top: 4px solid #03A9F4; border-bottom: 8px solid #03A9F4; color: rgba(0, 0, 0, 0.73);
}
h1, h2 { text-align: center;
}
h1 { font-size: 300%; font-weight: 300; line-height: 120%; color: #03A9F4;
}
h2 { font-size: 12px; text-transform: uppercase; font-weight: 500; opacity: .3; margin: 72px 0 32px; letter-spacing: 8px;
}
.container { position: relative; padding: 48px 0; border-bottom: 1px solid rgba(0, 0, 0, 0.04);
}
.container:before, .container:after { content: ""; display: block;
}
.container:after { clear: both;
}
.container:before { position: absolute; bottom: 0; left: 50%; width: 12px; height: 12px; background-color: #efefef; -webkit-transform: translate(-50%, 50%); transform: translate(-50%, 50%); border-radius: 50%;
}
.box { padding: 24px; margin: 48px 0 12px; border-radius: 3px; box-shadow: inset 0 0 1px 0px rgba(0, 0, 0, 0.08), inset 0 0 5px 0px rgba(0, 0, 0, 0.08), inset 0 0 20px 0px rgba(0, 0, 0, 0.05);
}
.box-title, .explain-title { font-weight: 500; font-size: 16px; line-height: 130%; padding-bottom: 8px; margin-bottom: 8px; border-bottom: 1px solid rgba(0, 0, 0, 0.04);
}
.box-title--bind { margin-bottom: 12px;
}
.box > .box { float: none; width: 100%; display: inline-block; vertical-align: top; margin: 12px 0 0; background-color: rgba(0, 0, 0, 0.04);
}
.box > .box-title--bind:last-child { margin-bottom: 0;
}
.explain { padding: 0;
}
.explain-title { border-bottom-color: #03A9F4;
}
.explain-content { line-height: 150%;
}
.explain pre { position: relative; font-family: monospace; font-size: 12px; line-height: normal; overflow: auto; opacity: 0.73;
}
.explain pre code { padding-bottom: 0 !important;
}
.explain pre b, .explain pre u { position: relative; z-index: 1;
}
.explain pre b:before, .explain pre u:before { content: ""; position: absolute; z-index: -1; top: 50%; left: 50%; width: 120%; height: 120%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%);
}
.explain pre b:before { width: 120%; background-color: red; border-radius: 100px;
}
.explain pre b *, .explain pre b *:before, .explain pre b *:after { color: white !important;
}
.explain pre u { text-decoration: none !important;
}
.explain pre u:before { width: 100%; border-bottom: 2px solid red;
}
.explain pre c *, .explain pre c *:before, .explain pre c *:after { color: rgba(128, 128, 128, 0.5);
}
.tabs-triggers { font-size: 0; text-align: center;
}
.tabs-triggers .tab-trigger { position: relative; z-index: 2; font-size: 14px; display: inline-block; vertical-align: top; width: 50%; cursor: pointer; padding: 8px; text-decoration: none; color: inherit; border-bottom: 1px solid rgba(0, 0, 0, 0.04);
}
.tabs-triggers .tab-trigger.is-active { color: #03A9F4; border-bottom: 1px solid #03A9F4;
}
.tabs-triggers .tab-trigger.is-active:after { position: absolute; content: ""; bottom: 0; left: 50%; width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-top: 6px solid #03A9F4; -webkit-transform: translate(-50%, 100%); transform: translate(-50%, 100%);
}
@media screen and (min-width: 800px) { h1 { font-size: 500%; letter-spacing: -2px; } .box, .explain { float: left; } .box { width: 40%; margin: 0; } .explain { width: 60%; padding: 24px 5% 0; }
}
AngularJS - Controller As - Script Codes JS Codes
angular.module('MyApp', [])
.controller('MainCtrl', ['$scope', function MainCtrl($scope){ var main = this; main.title = "Main Ctrl Title" $scope.title = "Main Ctrl Title"
}])
.controller('SecondCtrl', ['$scope', function SecondCtrl($scope){ var second = this; second.title = "Second Ctrl Title" $scope.title = "Second Ctrl Title"
}])
.controller('ThirdCtrl', ['$scope', function ThirdCtrl($scope){ var third = this; third.title = "Third Ctrl Title" $scope.title = "Third Ctrl Title"
}]);
Developer | Lorenzo D'Ianni |
Username | lorenzodianni |
Uploaded | September 29, 2022 |
Rating | 3 |
Size | 5,584 Kb |
Views | 12,144 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
SidebarJS | 3,666 Kb |
Material Design - Animations | 9,001 Kb |
Smooth Scroll | 3,561 Kb |
Checkbox Style - SCSS | 5,095 Kb |
Off Canvas in SASS | 5,680 Kb |
Material Design - Switch | 3,282 Kb |
Ng-circle | 3,355 Kb |
NgEasyModal | 4,159 Kb |
Cards experience | 10,660 Kb |
Material Design - Button in pure CSS | 3,923 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
A Pen by Matt Popovich | Mpopv | 3,349 Kb |
Android Logo with HTML and CSS | Wifi | 2,000 Kb |
Table border-collapse property | Maxds | 1,672 Kb |
Rows with image hover effect | Amit-webdesigner | 12,875 Kb |
Angular-HAML | Cwacht | 2,022 Kb |
Wip elementary os navbar | Nickcolley | 2,993 Kb |
Menu | Vivi_Lai | 1,210 Kb |
LAMP PURE CSS with Animation | Dam62500 | 2,911 Kb |
Responsive Section hover effect to show content | Berdejitendra | 2,540 Kb |
Word Wrap Algorithm for Multiline Canvas Text | Peterhry | 2,349 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!