我只是在尝试使用角度 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'