Navigation Angular 2路由器自版本alpha 34以来已损坏

Navigation Angular 2路由器自版本alpha 34以来已损坏,navigation,typescript,router,alpha,angular,Navigation,Typescript,Router,Alpha,Angular,我已经和安格拉尔玩了很长时间了。所有代码都是最前沿的,使用了最新的TypeScript Nightly 1.6和Angular alpha 34。我无法从其中一个组件调用父路由器。如果可能的话,请帮助我。随函附上代码和导航尝试错误 app.ts /// <reference path="../typings/angular2/angular2.d.ts" /> 'use strict'; import {Component, View, bootstrap} from 'angula

我已经和安格拉尔玩了很长时间了。所有代码都是最前沿的,使用了最新的TypeScript Nightly 1.6和Angular alpha 34。我无法从其中一个组件调用父路由器。如果可能的话,请帮助我。随函附上代码和导航尝试错误

app.ts

/// <reference path="../typings/angular2/angular2.d.ts" />
'use strict';
import {Component, View, bootstrap} from 'angular2/angular2';
import {routerInjectables, RouterOutlet, RouteConfig} from 'angular2/router';
import {LoginApp} from './login/login';
import {DashboardApp} from './dashboard/dashboard';
// Annotation section
@Component({
    selector: 'inventman-app'
})
@View({
    template: `<!-- The router-outlet displays the template for the current component based on the URL -->
    <router-outlet></router-outlet>`,
    directives: [RouterOutlet]
})
@RouteConfig([
    { path: '/', redirectTo: '/login' },
    { path: '/dashboard', as: 'dashboard', component: DashboardApp },
    { path: '/login', as: 'login', component: LoginApp }
])
// Component controller
export class InventmanApp {
    constructor() {
    }
}

// bootstrap the Main App
bootstrap(InventmanApp,
    [
        routerInjectables
    ]);
//
"严格使用",;
从'angular2/angular2'导入{组件、视图、引导程序};
从'angular2/router'导入{routerInjectables,RouterOutlet,RouteConfig};
从“./login/login”导入{loginnapp};
从“./dashboard/dashboard”导入{DashboardApp};
//注释部分
@组成部分({
选择器:“inventman应用程序”
})
@看法({
模板:`
`,
指令:[路由输出]
})
@线路图([
{路径:'/',重定向到:'/login'},
{路径:'/dashboard',作为:'dashboard',组件:DashboardApp},
{path:'/login',as:'login',component:LoginApp}
])
//组件控制器
导出类InventmanApp{
构造函数(){
}
}
//引导主应用程序
引导(InventmanApp,
[
路由可注入
]);
login.ts

/// <reference path="../../typings/angular2/angular2.d.ts" />
'use strict';
import {Component, View, formDirectives} from 'angular2/angular2';
import {Router} from 'angular2/router';
import {HttpService} from '../../services/httpservice/httpservice';
@Component({
    selector: 'login-app'
})
@View({
    templateUrl: './jsts/components/login/login.html',
    directives: [formDirectives],
    styleUrls: ['./jsts/components/login/login.css']
})
export class LoginApp {
    username: String;
    password: String;
    constructor(public router: Router) {
    }
    onSubmit() {
        const username = this.username, password = this.password;
        HttpService.serve('https://' + location.host + '/userapi/sessions/create', 'POST', {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        }, JSON.stringify({ username, password }))
            .then(response=> {
                if (!response.id_token) {
                    // Alerts the actual message received from the server
                    alert(response.message);
                    // Removes any previous assigned JWT to ensure tighter security
                    localStorage.removeItem('jwt');
                }
                else {
                    // Valid Login attempt -> Assign a jwt to the localStorage
                    localStorage.setItem('jwt', response.id_token);
                    // route to the dashboard
                    this.router.parent.navigate('/dashboard');
                }
            });
    }
}
//
"严格使用",;
从'angular2/angular2'导入{Component,View,FormDirections};
从'angular2/Router'导入{Router};
从“../../services/HttpService/HttpService”导入{HttpService};
@组成部分({
选择器:“登录应用程序”
})
@看法({
templateUrl:'./jsts/components/login/login.html',
指令:[格式指令],
样式URL:['./jsts/components/login/login.css']
})
导出类LoginApp{
用户名:字符串;
密码:字符串;
构造函数(公共路由器:路由器){
}
onSubmit(){
const username=this.username,password=this.password;
HttpService.serve('https://'+location.host+'/userapi/sessions/create','POST','{
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json”
},JSON.stringify({username,password}))
。然后(响应=>{
if(!response.id\u令牌){
//警报从服务器接收到的实际消息
警报(response.message);
//删除以前分配的任何JWT,以确保更严格的安全性
localStorage.removietem('jwt');
}
否则{
//有效登录尝试->将jwt分配给本地存储
localStorage.setItem('jwt',response.id_标记);
//到仪表板的路线
this.router.parent.navigate('/dashboard');
}
});
}
}
错误

异常:TypeError:无法读取未定义的属性“parent” angular2.dev.js:22448堆栈跟踪:angular2.dev.js:22448类型错误: 无法读取未定义的属性“parent” 评估时(login.js:34) at Zone.run(angular2.dev.js:136) 在Zone.execute.$\uuu 3.\u createInnerZone.Zone.fork.fork.$run[as run](angular2.dev.js:16437) 在zoneBoundFn(angular2.dev.js:109) 在lib$es6$promise$$internal$$tryCatch(angular2.dev.js:1359) 在lib$es6$promise$$internal$$invokeCallback(angular2.dev.js:1371) 在lib$es6$promise$$internal$$publish(angular2.dev.js:1342) 在angular2.dev.js:187 at Zone.run(angular2.dev.js:136) 在zoneBoundFn(angular2.dev.js:109)


这个问题的答案很简单。在从cli运行时,新的beta typescript编译器似乎完全避免了angular的DI。从IDE(升华3)插件编译似乎已经解决了这个问题


我已经进一步改进了代码,应该很快将其与截图一起推送到GIT,以供其他人参考和使用。

如果添加
this.router=router在构造函数中?除此之外,显然还有其他问题,显然是我做的。您现在可以在github中访问整个repo:要运行它,只需运行:mongod,npm install。nodemon(Windows)或sudo nodemon(OSX/Linux)顺便提一下,如果您初始化为构造函数(公共路由器:路由器){},根据es6语法,它相当于声明router:router构造函数(router:router){this.router=router;}。当您将变量声明为公共变量时,它将自动在全局范围内赋值。