angular 2 rc2 种子项目中的 ng2-bootstrap btnRadio。与 ngModel 的双向绑定被破坏了?
ng2-bootstrap btnRadio in angular 2 rc2 seed project. Two-way binding to ngModel is broken?
我正在尝试在 angular 2 rc2 种子项目中使用 ng2-bootstrap 单选按钮。
以下代码在我们的 angular 2 rc1 项目中没有任何问题。现在我正在尝试使用 https://github.com/mgechev/angular2-seed
作为基础来创建一个种子项目,但无法正确完成。
我按以下方式使用 ng2-bootstrap 单选按钮指令:
<div class="btn btn-primary" [(ngModel)]="mode" btnRadio="EDITOR" uncheckable>
Editor
</div>
我在 seed.config.ts 中包含了 ng2-bootstrap 和 moment 库。我尝试了很多变体(也有 ng2-bootstrap/ng2-bootstrap
等)
paths: {
...
'ng2-bootstrap': `${this.NPM_BASE}/ng2-bootstrap/`,
'moment': `${this.NPM_BASE}moment/`
},
packages: {
...
'ng2-bootstrap': { main: "ng2-bootstrap.js", defaultExtension: 'js' },
'moment': { main: "moment.js", defaultExtension: 'js' },
}
我导入以下指令
import { BUTTON_DIRECTIVES } from 'ng2-bootstrap/ng2-bootstrap';
import { ButtonRadioDirective } from 'ng2-bootstrap/ng2-bootstrap';
并由我的组件使用它
@Component({
moduleId: module.id,
selector: "editor",
templateUrl: "editor.html",
directives: [FORM_DIRECTIVES, CORE_DIRECTIVES, BUTTON_DIRECTIVES,
CodeMirrorComponent, ButtonRadioDirective]
})
我构建项目没有任何问题,但是当我 运行 服务器时,我获得以下 运行 时间异常:
ORIGINAL EXCEPTION: No value accessor for ''
我确定这里与 ngModel 的双向绑定被破坏了。我已经将此代码与 rc1 捆绑包一起使用,但没有种子项目。现在我不确定,可能是什么问题 - 新的 angular 版本,或使用构建系统(在我的情况下 - gulp)。
希望大家帮忙出出主意。非常感谢。
自 2016 年 6 月 21 日起编辑
使用的包版本如下:
"dependencies": {
"@angular/common": "2.0.0-rc.2",
"@angular/compiler": "2.0.0-rc.2",
"@angular/core": "2.0.0-rc.2",
"@angular/forms": "^0.1.0",
"@angular/platform-browser": "2.0.0-rc.2",
"@angular/platform-browser-dynamic": "2.0.0-rc.2",
"@angular/router": "3.0.0-alpha.6",
"es6-module-loader": "^0.17.8",
"core-js": "^2.4.0",
"rxjs": "5.0.0-beta.6",
"systemjs": "0.19.26",
"zone.js": "^0.6.12",
"bootstrap": "^3.3.6",
"ng2-bootstrap": "^1.0.17"
}
以下应该有效:
进口
import {AlertComponent} from 'ng2-bootstrap/ng2-bootstrap';
路径
'ng2-bootstrap': `${this.NPM_BASE}ng2-bootstrap/bundles/ng2-bootstrap.js`,
'moment/*': `${this.NPM_BASE}moment/*`,
包
'ng2-bootstrap': {defaultExtension: 'js'},
moment: { main: 'moment.js', defaultExtension: 'js' }
谢谢大家,我已经找到了问题和(暂时)解决方案。问题是 ng2-bootstrap 和 angular.forms 之间的冲突(我的版本是 0.1.0)。该问题与此问题有关 https://github.com/valor-software/ng2-bootstrap/issues/627 .
我现在不使用 angular 表格,并且在 main.ts
中简单地评论了以下几行
//import { disableDeprecatedForms, provideForms } from '@angular/forms/index';
bootstrap(AppComponent, [
//disableDeprecatedForms(),
//provideForms(),
APP_ROUTER_PROVIDERS,
{
provide: APP_BASE_HREF,
useValue: '<%= APP_BASE %>'
}
]);
我的代码现在可以正常工作了。
我正在尝试在 angular 2 rc2 种子项目中使用 ng2-bootstrap 单选按钮。
以下代码在我们的 angular 2 rc1 项目中没有任何问题。现在我正在尝试使用 https://github.com/mgechev/angular2-seed
作为基础来创建一个种子项目,但无法正确完成。
我按以下方式使用 ng2-bootstrap 单选按钮指令:
<div class="btn btn-primary" [(ngModel)]="mode" btnRadio="EDITOR" uncheckable>
Editor
</div>
我在 seed.config.ts 中包含了 ng2-bootstrap 和 moment 库。我尝试了很多变体(也有 ng2-bootstrap/ng2-bootstrap
等)
paths: {
...
'ng2-bootstrap': `${this.NPM_BASE}/ng2-bootstrap/`,
'moment': `${this.NPM_BASE}moment/`
},
packages: {
...
'ng2-bootstrap': { main: "ng2-bootstrap.js", defaultExtension: 'js' },
'moment': { main: "moment.js", defaultExtension: 'js' },
}
我导入以下指令
import { BUTTON_DIRECTIVES } from 'ng2-bootstrap/ng2-bootstrap';
import { ButtonRadioDirective } from 'ng2-bootstrap/ng2-bootstrap';
并由我的组件使用它
@Component({
moduleId: module.id,
selector: "editor",
templateUrl: "editor.html",
directives: [FORM_DIRECTIVES, CORE_DIRECTIVES, BUTTON_DIRECTIVES,
CodeMirrorComponent, ButtonRadioDirective]
})
我构建项目没有任何问题,但是当我 运行 服务器时,我获得以下 运行 时间异常:
ORIGINAL EXCEPTION: No value accessor for ''
我确定这里与 ngModel 的双向绑定被破坏了。我已经将此代码与 rc1 捆绑包一起使用,但没有种子项目。现在我不确定,可能是什么问题 - 新的 angular 版本,或使用构建系统(在我的情况下 - gulp)。
希望大家帮忙出出主意。非常感谢。
自 2016 年 6 月 21 日起编辑
使用的包版本如下:
"dependencies": {
"@angular/common": "2.0.0-rc.2",
"@angular/compiler": "2.0.0-rc.2",
"@angular/core": "2.0.0-rc.2",
"@angular/forms": "^0.1.0",
"@angular/platform-browser": "2.0.0-rc.2",
"@angular/platform-browser-dynamic": "2.0.0-rc.2",
"@angular/router": "3.0.0-alpha.6",
"es6-module-loader": "^0.17.8",
"core-js": "^2.4.0",
"rxjs": "5.0.0-beta.6",
"systemjs": "0.19.26",
"zone.js": "^0.6.12",
"bootstrap": "^3.3.6",
"ng2-bootstrap": "^1.0.17"
}
以下应该有效:
进口
import {AlertComponent} from 'ng2-bootstrap/ng2-bootstrap';
路径
'ng2-bootstrap': `${this.NPM_BASE}ng2-bootstrap/bundles/ng2-bootstrap.js`,
'moment/*': `${this.NPM_BASE}moment/*`,
包
'ng2-bootstrap': {defaultExtension: 'js'},
moment: { main: 'moment.js', defaultExtension: 'js' }
谢谢大家,我已经找到了问题和(暂时)解决方案。问题是 ng2-bootstrap 和 angular.forms 之间的冲突(我的版本是 0.1.0)。该问题与此问题有关 https://github.com/valor-software/ng2-bootstrap/issues/627 .
我现在不使用 angular 表格,并且在 main.ts
中简单地评论了以下几行//import { disableDeprecatedForms, provideForms } from '@angular/forms/index';
bootstrap(AppComponent, [
//disableDeprecatedForms(),
//provideForms(),
APP_ROUTER_PROVIDERS,
{
provide: APP_BASE_HREF,
useValue: '<%= APP_BASE %>'
}
]);
我的代码现在可以正常工作了。