2

So I'm building an angular 2 app, it's simple. contains 1 page and a login screen. here is my file structure:

├── node_modules
├── app
|    ├── app.component.ts
|    ├── boot.ts  
|    ├── pages
|        |── dashboard
|            |── dashboard.components.ts
|            |── dashboard.html
|        |── login
|            |── login.components.ts
|            |── login.html
|            |── auth.ts

and my files: app.component.ts:

import {Component OnInit} from 'angular2/core';
import { RouteConfig, ROUTER_DIRECTIVES ,Router} from 'angular2/router';
import {LoginComponent} from './pages/login/login.component';
import {DashboardComponent} from './pages/dashboard/dashboard.component'
@Component({
    selector: 'app',
    directives:[ROUTER_DIRECTIVES],
    template:`
        <div class="wrapper">
            <router-outlet></router-outlet>
        </div>`
})
@RouteConfig([
    { path: '/',name: 'Home',redirectTo: ['Dashboard'] },
    { path: '/login',name:'Login',component: LoginComponent },
    { path: '/dashboard',name:'Dashboard',component: DashboardComponent,}
])
export class AppComponent implements OnInit{
    private userAuthenticated = false;
    constructor(
        private _router: Router
    ){}
    ngOnInit(){
        if(!this.userAuthenticated){
            this._router.navigate(['Login']);
        }
    }
}

dashboard.component.ts:

import {Component} from 'angular2/core';

@Component({
    templateUrl:'app/pages/dashboard/dashboard.html'
})
export class DashboardComponent{
    public message = "Hello";
}

login.components.ts:

import {Component} from 'angular2/core';
import {NgForm}    from 'angular2/common';
@Component({
    selector:"login",
    templateUrl:'app/pages/login/login.html',
})
export class LoginComponent{
}

EVERYTHING at this point works great. Until I import auth.ts login.components.ts. Once I do this I get these errors:

Uncaught SyntaxError: Unexpected token <U @ system.src.js:4597o.execute @ system.src.js:4597i @ system.src.js:4597n @ system.src.js:4597execute @ system.src.js:4597y @ system.src.js:4597w @ system.src.js:4597p @ system.src.js:4597h @ system.src.js:4597(anonymous function) @ system.src.js:4597run @ angular2-polyfills.js:138zoneBoundFn @ angular2-polyfills.js:111lib$es6$promise$$internal$$tryCatch @ angular2-polyfills.js:1511lib$es6$promise$$internal$$invokeCallback @ angular2-polyfills.js:1523lib$es6$promise$$internal$$publish @ angular2-polyfills.js:1494(anonymous function) @ angular2-polyfills.js:243run @ angular2-polyfills.js:138zoneBoundFn @ angular2-polyfills.js:111lib$es6$promise$asap$$flush @ angular2-polyfills.js:1305
    angular2-polyfills.js:138 Uncaught SyntaxError: Unexpected token <
        Evaluating http://local.intranet/auth
        Error loading http://local.intranet/app/boot.js

Here is what login.components.ts looks like now:

import {Component} from 'angular2/core';
import {NgForm}    from 'angular2/common';
import {Auth} from 'auth';
@Component({
    selector:"login",
    templateUrl:'app/pages/login/login.html',
})
export class LoginComponent{
    login = new Auth("","");
    onSubmit(){console.log(this.login)};
}

and auth.ts looks like this:

export class Auth {
    constructor(
        public userName: string,
        public password: string
    ) {  }
}
4
  • That's what I'm using. Commented Dec 30, 2015 at 23:13
  • Did you add the router bundle? Commented Dec 30, 2015 at 23:25
  • Like I said everything works until I import auth.ts Commented Dec 30, 2015 at 23:38
  • Well, hard to say without looking at the config. As you see in the error is calling app/boot.js and auth (with no extension and with no app), so most likely your auth file is out of the config. Try importing app/auth, if that works is problem in your config. Commented Dec 30, 2015 at 23:43

1 Answer 1

11

in your login.component.ts:

import {Auth} from './auth';

instead of

import {Auth} from 'auth';

As I understand, this is the way the ES6 import syntax works. when importing from a module name "not a path", the module has to be registered beforehand using System.register(). So, when you import 'auth', the system will look for a registered module called 'auth'.

On the other hand, if you import from './some/path' relative to your file, the module will be imported without having to be registered globally.

look in the SystemJS docs for more info

Sign up to request clarification or add additional context in comments.

3 Comments

Can you explain to me the need for the "./"? Is this needed when importing any custom components?
yes, it's needed. You could also use '../' relatively to your file. I added some explanation. I hope it helped.
It's also needed in following scenario import {Auth} from './../providers/auth';

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.