首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用角2材料2α5和角2 RC 2

使用角2材料2α5和角2 RC 2
EN

Stack Overflow用户
提问于 2016-06-24 22:45:22
回答 2查看 590关注 0票数 1

几天前,我开始探索最近发布的角2rc 2,并尝试将我的应用程序从角2rc 1迁移到角1rc 2。

我在我的应用程序中使用了角2材料2阿尔法5。

虽然迁移并不花费太多时间,但当我编译和运行这个应用程序时,我发现使用角2材料2组件的表单被破坏了。

材质窗体控件不适用于角2 RC 2,控制台显示以下错误:

代码语言:javascript
运行
复制
EXCEPTION: No value accessor for 'firstName'.

我在md-inputmd-slide-togglemd-checkbox上测试了它,在它们中我得到了下面的例外。

代码语言:javascript
运行
复制
EXCEPTION: No value accessor for 'Field name'.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-24 22:52:22

我假设您已经成功地将表单迁移到了角2rc 2。

如果您正在将角2 RC 1(或更早的)窗体迁移到角2 RC 2,您可能会发现这对新窗体很有帮助。

How to migrate Angular 2 RC 1 (or earlier) Forms to Angular 2 RC 2 / RC 4 New Forms

要使角质材料工作,您需要进行以下更改:

取代

代码语言:javascript
运行
复制
var common_1 = require('@angular/common');

代码语言:javascript
运行
复制
var common_1 = require('@angular/forms');

在下列文件中:

代码语言:javascript
运行
复制
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错误,但当表单提交时,如果选中了对象,则会在对象下面张贴复选框:

代码语言:javascript
运行
复制
myCheckbox: MdCheckboxChange
checked:true
source:MdCheckbox
__proto__:Object
constructor:MdCheckboxChange()
__proto__:Object

为了解决这个问题,我们需要对以下文件进行另一项更改:

代码语言:javascript
运行
复制
node_modules/@angular2-material/checkbox/checkbox.js

定位

代码语言:javascript
运行
复制
MdCheckbox.prototype.registerOnChange = function (fn) {
    if (this._changeSubscription) {
        this._changeSubscription.unsubscribe();
    }
    this._changeSubscription = this.change.subscribe(fn);
};

,并将其替换为以下

代码语言:javascript
运行
复制
MdCheckbox.prototype.registerOnChange = function (fn) {
        if (this._changeSubscription) {
            this._changeSubscription.unsubscribe();
        }
        this._changeSubscription = this.change
        .map(function (v) {
            return v.checked;
        })
        .subscribe(fn);
    };

我希望你会发现上面的有用。

票数 1
EN

Stack Overflow用户

发布于 2016-07-29 08:59:54

不要忘记将"provideForms“调用添加到main.ts (或js)中的引导代码中。

我的引导代码看起来像

代码语言:javascript
运行
复制
return bootstrap(<Type>AppComponent, [
    ...PROVIDERS,
    ...ENV_PROVIDERS,
    ...DIRECTIVES,
    ...PIPES,
    ...APP_PROVIDERS,
    ...APP_ROUTER_PROVIDERS,
    disableDeprecatedForms(),
    provideForms()
])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38023104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档