Getting-Started-with-AngularJS

Sep 8, 2018 | Publisher: edocr | Category: Technology |  | Collection: Business Ideas | Views: 21 | Likes: 2

Getting Started with AngularJS ! by Jeremy Zerr ! Blog: http://www.jeremyzerr.com LinkedIn: http://www.linkedin.com/in/jrzerr Twitter: http://www.twitter.com/jrzerr What is AngularJS Open Source Javascript MVC/MVVM framework. Helps manage complexity of your client-side Javascript code. Extend HTML vocabulary with your own elements and attributes. Built-in HTTP and more importantly REST API web service integration. Includes its own client-side templating language. Two-way data binding to allow the Model to be used as the source of truth. Has client-side routing to enable creating single page apps (SPA) Sponsored by Google, lots of contributions by Google employees, but on Github as public repo. Requirements Does not require jQuery, but will use it if you have it. Can be implemented for sub-sections of a page, so can interoperate with other components. Testing examples given in Jasmine and ran using Karma. Minified is 100k, gzipped brings down to 37k (version 1.2.9). Also pretty common to use ngResource which is 3k minified. Stephen R. Covey, The 7 Habits of Highly Effective People "to learn and not to do is really not to learn. To know and not to do is really not to know." AngularJS Examples First examples, then we'll talk about the bigger picture of why you should consider using AngularJS in your next web app. Starter AngularJS app We'll start by defining some Javascript objects in a controller to represent our Models Then we will display the object using AngularJS built-in template system Follow along with this Plunker Starter AngularJS app (templating) This shows what AngularJS client-side templating looks like ng-controller provides an identifier to link with code ng-repeat iterates through a variable in the controller's $scope Starter AngularJS App (controller) The name of our app is myApp Controller is ToddlerCtrl We define the controller and fill our scope up with Toddler objects. (its just a Javascript data structure - JSON) What is a $scope? $scope is the application ViewModel It is the glue between the controller and the view. AngularJS documentation on $scope Using client-side models from different data sources Data sources: Using JSON in the initial page load to pre-populate Services Using a static JSON file Using a REST API We'll build on the previous example by creating our Models using different data sources. Follow along with this Plunker Using JSON in initial page load Assign the JSON to a variable in a tag. Create a Service using $resource Pass the JSON to the constructor Using REST API & JSON file You create a URL template. This identifies the object ID field (aid) Controller body shows initializing data 4 different ways With the same Adult resource, you do a get() to request a single object Templating methods Directives + AngularJS templating allows you to create custom HTML markup, both elements and attributes Templating types: We've already seen inline HTML Can define within Javascript Can include within tags Can include in an external HTML file We'll take our existing code, pick the local JSON file as the data source, and show a comparison between these different templating methods. Follow along with this Plunker Templating method: Javascript We use an AngularJS directive Can also declare your template right in Javascript Templating method: Template cache can be pre-loaded by including a template within tags, using a special type. Any directive that references teen-internal.html first looks in template cache before requesting the html file from the server. Two-way data binding You can bind a variable in $scope to elements or inputs You can also use a $scope variable to control which CSS class gets applied to an element If the input changes its value, the underlying $scope variable also changes. Follow along with this Plunker How would you have done this with jQuery + Mustache? See this Plunker Two-way data binding: ng-model + ng-class To achieve 2-way data binding, you use ng-model to attach an element to something in the $scope As the checkbox is clicked, the underlying structure changes The ng-class construct also applies the appropriate class as the underlying model changes You can also do 1-way data binding using ng-bind instead of ng-model Filters and Formatters There are several built-in filters, which can do either filtering or formatting of data within your client side templates. Formatters: currency, date, json, lowercase, number, uppercase Filters: limitTo, orderBy Let's take a look at how date formatting can be done. Follow along with this Plunker Watch a $scope variable AngularJS allows us to monitor a $scope variable using $watch Allows you to have a callback fire whenever the value changes Prefer using this rather than ng-click or ng-change if possible. Replaces jQuery click or change events. Follow along with this Plunker Watch a $scope variable (code) You can use $watch on a $scope variable to hook into whenever it is changed Client-side routing Allows you to map URL fragments, using #, to templates and controllers to design single page apps easier. Perfect for perma-linking and allowing browser history to work like the user would expect. Uses ngRoute to accomplish this mapping of URL paths to templates and controllers. Similar function to a Front Controller design pattern that you would use server-side in MVC design. Follow along with this Plunker Client-side routing (code) You map hash routes to a controller and template #/adults is how the path would look in the address bar. (or #/ adults/1) Other Notable Directives The AngularJS API page has a full list of directives. ngShow and ngHide similar to jQuery .show() and .hide() ngInclude, ngIf, ngSwitch to use a template and manipulate the DOM based on a condition Interacting with a REST API As seen in other examples, the syntax makes the Asynchronous REST API call "appear" synchronous. The call to query() returns an empty object, that is filled back in when the AJAX response returns. There are a lot of default methods provided in ngResource, get(), query(), remove(), delete(), save(). Let's do a $save, Follow along with this Plunker Interacting with a REST API (code) Other than $watch, you have a lot of other hooks into view changes. Here we use ng-change to call a function to issue an AJAX $save to the REST API The argument to the Adult REST API is pulled from the $routeParams, the server is called like /adults/1.json How Does $watch Work The whole $watch process is a great design pattern to follow in Web Applications. This is generically called the Observer design pattern. It goes along with $digest and $apply, it is a part of the $digest cycle. When a variable changes or $apply is run, this causes the $digest cycle to kick off and compare the variable values, previous to current. This only happens to variables you have bind'ed to. This part of AngularJS is likely where you are first exposed to it's inner workings. Why? Custom Directives! Creating a custom directive Let's try and add a custom directive to save the value of an input when the user presses enter. We want to create our own ngEnter directive we can attach to any input element. Follow along with this Plunker Creating a custom directive ngEnter - change model on pressing enter You can create your own directive that can be used as an attribute on an existing element. You can also pass $scope parameters to it. Directive Best Practices Choices to consider Using Attribute vs. Element Using proper HTML5/XHTML5 markup Scope considerations for reusable code See my blog post on AngularJS Directive Best Practices Directive Best Practices (Forms of directives) Ways to reference a directive from within a template. Equivalent examples of an attribute that would match ng- bind. What I haven't (and won't) cover in detail Form validation Instead of ngResource, you can just use $http for lower level control (closer to jQuery ajax/get) Restangular Writing tests + how the $injector works Animations Lots more Why Use AngularJS? Now we know what AngularJS can do. Why should we integrate it into our web application? Why should you use AngularJS in your next web app? Encourages good web app front-end design practices Model as the source of truth Using classes for style not functionality Dependency Injection core to framework to have code that is test- ready Use client-side objects that are similar to server-side objects Easy to hook up to REST API to have server just providing data and HTML Less code to write, recall the jQuery vs. AngularJS example Creating directives that encourage re-use and easy to be shared with others Easy to collaborate with other developers by using object- oriented design principles, reusable components, and focus on testability Client-side templating Does not depend on jQuery, so you don't need to include both. Weaknesses of AngularJS No server-side templating (supposedly version 2.0). No easy way to switch out to use a different templating engine Putting functionality embedded in HTML may not feel like good enough separation of presentation and code. SEO for public-facing web apps is difficult to achieve due to no server-side templating Using PhantomJS to create snapshots and save, then use #! in URL: link Have to be careful of over-$watching. You can watch all properties of every object if you really want to. AngularJS vs. Backbone.js Both have routing, REST API is easy to work with. AngularJS is more dependent on adding directives and attributes to DOM, so you are extending HTML. AngularJS in general will result in less code written for REST API and CRUD apps. Backbone.js coding style feels more similar to back-end coding of Models. You have to write a lot more code in Backbone to get started. Lots of extending of base classes. AngularJS is designed to be easy to share code with the developer community. Why? Directives! Yes, Backbone has plugins, but to me it feels easier to have something you can drop in and attach to an element. Two-way data binding is built into AngularJS at its core. Have to wire it up yourself in Backbone or grab a plugin. Backbone.js uses Underscore for templating and other functions. Underscore can run on server-side using node.js to generate server-side templates. Backbone.js can also more easily switch out to use a different templating system like Mustache which has great server-side support. Both are seeing similar levels of activity on Stack Overflow so I it's hard to gauge which one is more popular. Where do you go next? Basic Tutorial on AngularJS site Developer Guide on AngularJS site ng-conf 2014 was in Jan 2014, videos have been posted Paid video-based training at egghead.io See all the code from this presentation, and more, at My Plunker Page Thanks! ! Jeremy Zerr ! Blog: http://www.jeremyzerr.com LinkedIn: http://www.linkedin.com/in/jrzerr Twitter: http://www.twitter.com/jrzerr

Business planning ideas from around the internet.

Publishing documents on edocr is a proven way to start demand generation for your products and services. Thousands of professionals and businesses publish marketing (brochures, data sheets, press releases, white papers and case studies), sales (slides, price lists and pro-forma agreements), operations (specifications, operating manuals, installation guides), customer service (user manuals) and financial (annual reports and financial statements) documents making it easier for prospects and customers to find content, helping them to make informed decisions. #SEO #leadgen #content #analytics

About edocr

I am an accomplished content marketing professional helping you to build your brand and business. In my current role, I fulfill a multi-faceted solution marketplace including: publishing and sharing your content, embedding a document viewer on your website, improving your content’s search engine optimization, generating leads with gated content and earning money by selling your documents. I gobble up documents, storing them for safekeeping and releasing the text for excellent search engine optimization, lead generation and earned income. 

Publishing documents on edocr.com is a proven way to start demand generation for your products and services. Thousands of professionals and businesses publish marketing, sales, operations, customer service and financial documents making it easier for prospects and customers to find content, helping them to make informed decisions.

Get publishing now!

×

Modal Header

Modal body