Home » Ember.js Basics Cheat Sheet

Ember.js Basics Cheat Sheet

by 7kokcmax71

1. Installation and Setup

Install Ember CLI (Globally):

npm install -g ember-cli

Create a New Ember Project:

ember new my-ember-app
cd my-ember-app
ember serve
  • Visit:
    http://localhost:4200
    

2. Project Structure (Key Folders)

my-ember-app/
│
├── app/                  # Main app code
│   ├── components/       # Reusable components
│   ├── controllers/      # Controllers for routes
│   ├── models/           # Data models (Ember Data)
│   ├── routes/           # Route handlers
│   ├── services/         # Shared logic/services
│   ├── templates/        # Handlebars templates
│   └── styles/           # CSS/SCSS styling
│
├── public/               # Static files
├── tests/                # Automated tests
├── config/               # Environment configuration
└── package.json          # Project dependencies

3. Running the Application

ember serve
  • Development Server:
    http://localhost:4200
    

4. Generating New Files

ember generate component my-component
ember generate route about
ember generate model user
ember generate service auth

5. Creating a Route

Generate a Route:

ember generate route about

app/router.js:

import EmberRouter from '@ember/routing/router';
import config from './config/environment';

const Router = EmberRouter.extend({
  location: config.locationType,
  rootURL: config.rootURL
});

Router.map(function() {
  this.route('about');
});

export default Router;

app/routes/about.js:

import Route from '@ember/routing/route';

export default class AboutRoute extends Route {
  model() {
    return { message: 'Welcome to the About Page!' };
  }
}

app/templates/about.hbs:

<h1>{{model.message}}</h1>

6. Creating a Component

Generate Component:

ember generate component hello-world

app/components/hello-world.js:

import Component from '@glimmer/component';

export default class HelloWorldComponent extends Component {
  message = 'Hello from Ember!';
}

app/templates/components/hello-world.hbs:

<h1>{{this.message}}</h1>

Using the Component (in application.hbs):

<HelloWorld />

7. Template Syntax (Handlebars)

Dynamic Data Binding:

<h1>{{model.title}}</h1>

Conditional Rendering:

{{#if user.isLoggedIn}}
  <p>Welcome back!</p>
{{else}}
  <p>Please log in.</p>
{{/if}}

Looping (each):

<ul>
  {{#each this.items as |item|}}
    <li>{{item.name}}</li>
  {{/each}}
</ul>

8. Actions (Event Handling)

<button {{on "click" this.sayHello}}>Click Me</button>
import Component from '@glimmer/component';
import { action } from '@ember/object';

export default class ButtonComponent extends Component {
  @action
  sayHello() {
    alert('Hello, Ember!');
  }
}

9. Two-Way Data Binding (@tracked)

import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';

export default class CounterComponent extends Component {
  @tracked count = 0;

  @action
  increment() {
    this.count++;
  }
}
<p>Count: {{this.count}}</p>
<button {{on "click" this.increment}}>Increment</button>

10. Models (Ember Data)

Generate Model:

ember generate model user

app/models/user.js:

import Model, { attr } from '@ember-data/model';

export default class UserModel extends Model {
  @attr name;
  @attr email;
}

11. Fetch Data from API (Model Hook)

import Route from '@ember/routing/route';
import { service } from '@ember/service';

export default class UsersRoute extends Route {
  @service store;

  model() {
    return this.store.findAll('user');
  }
}

12. Forms and Input Binding

<input type="text" value={{this.username}} {{on "input" this.updateName}}>
<p>Your name: {{this.username}}</p>
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';

export default class NameFormComponent extends Component {
  @tracked username = '';

  @action
  updateName(event) {
    this.username = event.target.value;
  }
}

13. Services (Global State Management)

Generate Service:

ember generate service auth

app/services/auth.js:

import Service from '@ember/service';
import { tracked } from '@glimmer/tracking';

export default class AuthService extends Service {
  @tracked isLoggedIn = false;

  login() {
    this.isLoggedIn = true;
  }
}

Injecting Service (Component):

import Component from '@glimmer/component';
import { inject as service } from '@ember/service';

export default class NavbarComponent extends Component {
  @service auth;
}
{{#if this.auth.isLoggedIn}}
  <p>Welcome User!</p>
{{else}}
  <button {{on "click" this.auth.login}}>Login</button>
{{/if}}

14. Helper Functions

ember generate helper capitalize
import { helper } from '@ember/component/helper';

export default helper(function capitalize([text]) {
  return text.toUpperCase();
});
<p>{{capitalize "hello ember"}}</p>

15. Testing (Ember QUnit)

ember test
  • Run Specific Test:
    ember test --filter="component:hello-world"
    

16. Useful Commands

ember serve                  # Start development server
ember build                  # Build project
ember test                   # Run tests
ember generate route about   # Generate route
ember generate component nav # Generate component
ember generate model post    # Generate model

This cheat sheet covers essential topics to kickstart your Ember.js projects

You may also like

Adblock Detected

Please support us by disabling your AdBlocker extension from your browsers for our website.