angular2:添加路由器出口导致ngModel无法触发

时间:2016-03-10 18:32:29

标签: angular

我正在试验w / angular 2 beta 9,我想知道:

我有一个用以下内容绑定输入字段的组件:

[(ngModel)]="email" (ngModelChange)="changedExtraHandler($event)"

每次我输入内容时,changedExtraHandler()都会触发。

现在在父组件中,我添加了router-outlet加配置:

@Component({
    selector: 'fv-app',
    directives: [ROUTER_DIRECTIVES, HeaderComponent, LoginComponent, RouterOutlet],
    template: `
    <fv-header></fv-header>
    <a [routerLink]="['Login']">Login</a>
    <fv-login></fv-login>
    <router-outlet></router-outlet>
    `,
    providers: [
      UserService
    ]
})
@RouteConfig([
  {
    path: '/login',
    name: 'Login',
    component: LoginComponent
  }
])
export class AppComponent { }

似乎有效,当我在/login时,组件会显示两次。但是,当我在嵌套在router-outlet下的组件中输入内容时,changedExtraHandler()不会触发。有谁知道我错过了什么?

修改

因此,经过一些调试后,结果表明,正常情况下正常呈现的指令设置正确,而NgModel#ngOnChanges调用router-outlet registers the onChange method。当路由器创建元素时,不会调用此方法,因此不会更新ngModel。也许这是因为设置是在setUpControl中完成的,当调用路由器插座时,它不会检测到更改,因为组件未插入AbstractChangeDetector#_detectChangesInViewChildren下,但除此之外。但是,只是猜测,将进一步调查。任何帮助仍然非常感谢;)

见这里:https://github.com/rweng/ng2-routing

1 个答案:

答案 0 :(得分:1)

好的,我明白了。问题是,我认为在引导应用程序时,以下内容已经足够了:

import 'reflect-metadata';
import {bootstrap}    from 'angular2/platform/browser'

但是,似乎没有正确加载zonejs,或者加载太晚了。在开始时导入polyfill修复了路由器的问题以及UI无法正确更新的其他问题:

import 'reflect-metadata';
import 'angular2/bundles/angular2-polyfills'
import {bootstrap}    from 'angular2/platform/browser'