Skip to content

Step 12 - creating reusable components #50

wants to merge 21 commits into from

4 participants


Great tutorial, awesome job guys!

While I was going through the steps I felt there was something missing though: The ability to create reusable components with Angular.

After some research, I found out it's not actuallu missing from Angular, it's just missing from the tutorial.

Please consider adding another step that teaches how to use module directives to accomplish this.
I've made a quick sample of how the code could look in this pull request (app/using_components.html).
Of course, it can be improved, but it gives the idea.

Review on Reviewable

IgorMinar and others added some commits Apr 29, 2012
@IgorMinar IgorMinar add bootstrap 2.0.3 b1ed3a3
@IgorMinar IgorMinar angular-phonecat
added phonecat specific info into the file
@IgorMinar IgorMinar empty the angular-seed project
- Initial [angular-seed] project layout without default app and test
@IgorMinar IgorMinar add tutorial related scripts 8035332
@IgorMinar IgorMinar add phones.json
- Added a json file with a list of all phones. This file fakes a
  backend which would typically render this list dynamically from
  a database.
@IgorMinar IgorMinar add phone detail json files
- Added one json file with detailed information about each phone
  listed in phones.json
@IgorMinar IgorMinar add phone images
- Added images for each phone listed in phones.json
@IgorMinar IgorMinar step-0 bootstrap angular app
- add ngApp directive to bootstrap the app
- add simple template with an expression
@IgorMinar IgorMinar step-1 static phone list
- Added static html list with two phones into index.html
@IgorMinar IgorMinar step-2 angular template with repeater
- Converted the static html list into dynamic one by:
  - creating PhoneListCtrl controller for the application
  - extracting the data from HTML into a the controller as an in-memory
  - converting the static document into a template with the use of
    `[ngRepeat]` [directive] which iterates over the dataset with phones,
    clones the ngRepeat template for each instance and renders it into the
- Added a simple unit test to show off how to write tests and run them
  with JsTD (see for instructions)
@IgorMinar IgorMinar step-3 interactive search
- Added a search box to demonstrate how:
  - the data-binding works on input fields
  - to use [filter] filter
  - [ngRepeat] automatically shrinks and grows the number of phones in the view
- Added an end-to-end test to:
  - show how end-to-end tests are written and used
  - to prove that the search box and the repeater are correctly wired together
@IgorMinar IgorMinar step-5 XHR and dependency injection
- Replaced the in-memory dataset with data loaded from the server (in
  the form of static phone.json file to make this tutorial backend
  - The json file is loaded using the [$http] service
- Demonstrate the use of [services][service] and [dependency injection][DI]
  - The [$http] is injected into the controller through [dependency injection][DI]
@IgorMinar IgorMinar step-6 phone images and links
- adding phone image and links to phone pages
- add end2end test that verifies our phone links
- css to style the page just a notch
@IgorMinar IgorMinar step-4 phone ordering
- Add "age" property to the phone model
- Add select box to control phone list order
- Override the default order value in controller
- Add unit and e2e test for this feature
@IgorMinar IgorMinar step-7 $route and app partitioning
- Introduce the [$route] service which allows binding URLs for deep-linking with
  - Create PhoneCatCtrl which governs the entire app and contains $route
  - Map `/phones' to PhoneListCtrl and partails/phones-list.html
  - Map `/phones/<phone-id>' to PhoneDetailCtrl and partails/phones-detail.html
  - Copy deep linking parameters to root controller `params` property for access
    in sub controllers
  - Replace content of index.html with [ng:view] widget
- Create phone list route
  - Preserve existing PhoneListCtrl controller
  - Move existing html from index.html to partials/phone-list.html
- Create phone details route
  - Empty placeholder PhoneDetailsCtrl controller
  - Empty placeholder partials/phane-details.html template
@mhevery mhevery step-8 phone details view
- Fetch data for and render phone detail view
  - PhoneDetailCtrl controller to fetch details json with [$xhr] for a specific
  - template for the phone detailed view
- CSS to make the phone details page look "pretty"
@IgorMinar IgorMinar step-9 checkmark filter
- Added custom checkmark filter
- Update phone detail template to use checkmark filter
- Added spec for the filter
@IgorMinar IgorMinar step-11 custom service and $resource
- Replaced [$xhr] with [$resource]
- Created a custom Phone service that represents the $resource client
@IgorMinar IgorMinar step-10 image swapping with ng:click
In the phone detail view, clicking on a thumbnail image, changes the
main phone image to be the large version of the thumbnail image.

- Define mainImageUrl model variable in the PhoneDetailCtrl and set its
  default value
- Create setImage controller method to change mainImageUrl
- Register ng:click handler for thumb images to use setImage controller
- Add e2e tests for this feature
- Add css to change the mouse cursor when user points at thumnail images
@tonylampada tonylampada Step-12: enter directives a8ab227
@tonylampada tonylampada removing stuff from step-13 61fd573
@tonylampada tonylampada referenced this pull request May 11, 2013

Step 13 #51

Angular member

Thanks for proposing this enhancement but we are not adding new steps to the tutorial right now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.