- Normalizr & ImmutableJS
- "Smart" & "Dumb" Components
AsyncPipe
to handle subscription to Observables- Store is never exposed and only used privately inside services to dispatch Actions
- Splice up the store using RxJS Operators (i.e.
Users.users$
,Users.loading$
,Users.adding$
) for easier consumption in Smart Components
# clone the repo
git clone [email protected]:meenie/angular2-store-example.git
# change directory to our repo
cd angular2-store-example
# install the repo with npm
npm install
# start the server
npm start
go to http://0.0.0.0:3000 in your browser
- File Structure
- Getting Started
- Contributing
- TypeScript
- Frequently asked questions
- Support, Questions, or Feedback
- License
We use the component approach in our starter. This is the new standard for developing Angular apps and a great way to ensure maintainable code by encapsulation of our behavior logic. A component is basically a self contained app usually in a single file or a folder with each concern as a file: style, template, specs, e2e, and component class. Here's how it looks:
angular2-webpack-starter/
├──src/ * our source files that will be compiled to javascript
| ├──main.ts * our entry file for our browser environment
│ │
| ├──index.html * Index.html: where we generate our index page
│ │
| ├──vendor.ts * our vendor file
│ │
│ ├──app/ * WebApp: folder
│ │ ├──app.spec.ts * a simple test of components in app.ts
│ │ └──app.ts * App.ts: a simple version of our App component components
│ │
│ └──assets/ * static assets are served here
│ ├──icon/ * our list of icons from www.favicon-generator.org
│ ├──service-worker.js * ignore this. Web App service worker that's not complete yet
│ ├──robots.txt * for search engines to crawl your website
│ └──human.txt * for humans to know who the developers are
│
├──test/ * this is our global unit tests and end-to-end tests
│
├──spec-bundle.js * ignore this magic that sets up our angular 2 testing environment
├──karma.config.js * karma config for our unit tests
├──protractor.config.js * protractor config for our end-to-end tests
│
├──tsconfig.json * config that webpack uses for typescript
├──typings.json * our typings manager
├──package.json * what npm uses to manage it's dependencies
│
├──webpack.config.js * our development webpack config
├──webpack.test.config.js * our testing webpack config
└──webpack.prod.config.js * our production webpack config
This project uses json-server as an API to help with
CRUD operations on the front-end. Please read the documentation in the provided link to learn
more on how you can use it. After running npm install
, there is a postinstall
script which
will generate the file called db.json
with some seeded data. Change this all you like, it has
been .gitignore
d.
What you need to run this app:
node
andnpm
(brew install node
)- Ensure you're running the latest versions Node
v4.1.x
+ and NPM2.14.x
+
Once you have those, you should install these globals with npm install --global
:
webpack
(npm install --global webpack
)webpack-dev-server
(npm install --global webpack-dev-server
)karma
(npm install --global karma-cli
)protractor
(npm install --global protractor
)typings
(npm install --global typings
)typescript
(npm install --global typescript
)
fork
this repoclone
your forknpm install
to install all dependenciestypings install
to install necessary typingsnpm start
to start the dev server in another tab
After you have installed all dependencies you can now run the app. Run npm start
to start a local server using webpack-dev-server
which will watch, build (in-memory), and reload for you. The port will be displayed to you as http://0.0.0.0:3000
.
There are a couple of environment variables you can set to change some of the server settings:
PORT
: Port to run the server on. Default is:3000
JSON_SERVER_DB
: File to use forjson-server
. Default is:db.json
JSON_SERVER_PORT
: Port to runjson-server
on. Default is:3100
JSON_SERVER_DELAY
: How much delay eachjson-server
API call has. Default is:100
# development
npm start
# production
npm run build:prod
npm run server:prod
# development
npm run build:dev
# production
npm run build:prod
npm run watch
npm run test
npm run webdriver:update
npm run webdriver:start
# make sure you have webdriver running and a sever for the client app
npm run e2e
Please do :).
To take full advantage of TypeScript with autocomplete you would have to install it globally and use an editor with the correct TypeScript plugins.
TypeScript 1.7.x includes everything you need. Make sure to upgrade, even if you installed TypeScript previously.
npm install --global typescript
We have good experience using these editors:
- Visual Studio Code
- Webstorm 10
- Atom with TypeScript plugin
- Sublime Text with Typescript-Sublime-Plugin
- What's the current browser support for Angular 2 Beta?
- Please view the updated list of browser support for Angular 2
- Why is my service, aka provider, is not injecting parameter correctly?
- Please use
@Injectable()
for your service for typescript to correctly attach the metadata (this is a TypeScript problem)
- Please use
- How do I run protractor with node 0.12.x?
- please check out this repo to use the old version of protractor #146
- Where do I write my tests?
- You can write your tests next do your component files see
/src/app/home/home.spec.ts
- You can write your tests next do your component files see
- How do I start the app when I get
EACCES
andEADDRINUSE
errors?- The
EADDRINUSE
error means the port3000
is currently being used andEACCES
is lack of permission for webpack to build files to./dist/
- The
- How to use
sass
for css? loaders: ['raw-loader','sass-loader']
and@Component({ styles: [ require('./filename.scss') ] })
see issue #136- How do I test a Service?
- See issue #130
- How fo I add
vscode-chrome-debug
support? - The VS Code chrome debug extension support can be done via
launch.json
see issue #144