我假设您已成功将表单迁移到 Angular 2 RC 2。
如果您正在将 Angular 2 RC 1(或更早版本)表单迁移到 Angular 2 RC 2,您可能会发现这对新表单很有帮助
如何将 Angular 2 RC 1(或更早版本)表单迁移到 Angular 2 RC 2 / RC 4 新表单
要使角材料起作用,您需要进行以下更改:
代替
var common_1 = require('@angular/common');
和
var common_1 = require('@angular/forms');
在以下文件中:
node_modules/@angular2-material/checkbox/checkbox.js
node_modules/@angular2-material/input/input.js
node_modules/@angular2-material/radio/radio.js
node_modules/@angular2-material/slide-toggle/slide-toggle.js
尽管在材料组件源文件中进行上述更改适用于其他组件,但不适用于复选框。此更改确实消除了表单加载时的 ValueAccessor 错误,但是当表单被提交时,如果选中复选框,它会在对象下方发布:
myCheckbox: MdCheckboxChange
checked:true
source:MdCheckbox
__proto__:Object
constructor:MdCheckboxChange()
__proto__:Object
为了解决这个问题,我们需要在以下文件中进行另一项更改:
node_modules/@angular2-material/checkbox/checkbox.js
定位
MdCheckbox.prototype.registerOnChange = function (fn) {
if (this._changeSubscription) {
this._changeSubscription.unsubscribe();
}
this._changeSubscription = this.change.subscribe(fn);
};
并将其替换为以下内容:
MdCheckbox.prototype.registerOnChange = function (fn) {
if (this._changeSubscription) {
this._changeSubscription.unsubscribe();
}
this._changeSubscription = this.change
.map(function (v) {
return v.checked;
})
.subscribe(fn);
};
我希望你会发现以上内容很有用。