角度2:添加路由器插座会导致ngModel不触发



我只是在尝试使用角度 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()不会触发。有谁知道我错过了什么?

编辑

因此,经过一些调试后,事实证明,在没有router-outlet的情况下正常呈现的指令设置正确,并且 NgModel#ngOnChanges 调用注册 onChange 方法的setUpControl。当路由器创建元素时,不会调用此方法,因此不会更新 ngModel。也许是因为设置是在 AbstractChangeDetector#_detectChangesInViewChildren 中完成的,当为路由器出口调用时,它不会检测到更改,因为组件没有插入 <router-outlet> 下方,而是在它旁边。不过,只是猜测,要进一步调查。任何帮助仍然非常感谢;)

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

好的,我想通了。问题是,我认为在引导应用程序时以下内容就足够了:

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'

最新更新