Angular2 无法使用 javascript 导入 FormsModule

Posted

技术标签:

【中文标题】Angular2 无法使用 javascript 导入 FormsModule【英文标题】:Angular2 unable to import FormsModule with javascript 【发布时间】:2017-01-25 15:53:46 【问题描述】:

我正在做 Angular2 英雄教程: https://angular.io/docs/ts/latest/tutorial/toh-pt1.html 在纯 javascript(不是 Typescript)中,我无法导入前面提到的表单模块:(描述仅适用于 Typescript):

在我们可以对表单输入使用双向数据绑定之前,我们需要在 Angular 模块中导入 FormsModule 包。我们将它添加到 NgModule 装饰器的 imports 数组中。此数组包含我们的应用程序使用的外部模块列表。

import  NgModule       from '@angular/core';
import  BrowserModule  from '@angular/platform-browser';
import  FormsModule    from '@angular/forms';
import  AppComponent   from './app.component';
@NgModule(
  imports: [
    BrowserModule,
    FormsModule
  ],
  declarations: [
    AppComponent
  ],
  bootstrap: [ AppComponent ]
)
export class AppModule  

当我将 Forms 模块添加到我的 app.module.js 导入数组时,找不到模块:

zone.js:129 未捕获错误:模块“class2”导入的意外值“未定义”

这是我的 app.module.js:

(function(app) 
  app.AppModule =
    ng.core.NgModule(
      imports: [ ng.platformBrowser.BrowserModule, ng.common.FORM_DIRECTIVES],
      declarations: [ app.AppComponent],
      bootstrap: [ app.AppComponent ]
    )
    .Class(
      constructor: function() 
    );
)(window.app || (window.app = ));

在我的 node_modules 文件夹中,Forms 模块存在。如果我从导入数组中删除“ng.common.FORM_DIRECTIVES”,则不会引发错误。

console.dir(ng) 的内容是:

Object
    common:Object
    compiler:Object
    core:Object
    coreTokens:Object
    platformBrowser:Object
    platformBrowserDynamic:Object
    probe
    :
    inspectNativeElement(element /** TODO #9100 */)
    __proto__:Object

console.dir(ng.forms)的内容是:

undefined

【问题讨论】:

你能把内容贴出来吗:console.dir(ng);和 console.dir(ng.forms); ? @IvRRimUm : 我把上面的内容贴出来了。 你用什么做服务器?代码看起来正确。 我正在使用 MAMP 版本 3.5 (3.5)。奇怪的是“平台浏览器”节点模块正在正确加载。 【参考方案1】:

尝试使用import FORM_DIRECTIVES from 'angular2/common';

来源:Angular 2 two way binding using ngModel is not working

编辑:

import  NgModule       from '@angular/core';
import  BrowserModule  from '@angular/platform-browser';
import  FORM_DIRECTIVES  from 'angular2/common';
import  AppComponent   from './app.component';
@NgModule(
  imports: [
    BrowserModule,
    FORM_DIRECTIVES
  ],
  declarations: [
    AppComponent
  ],
  bootstrap: [ AppComponent ]
)
export class AppModule  

如果这不起作用,请发布 console.dir(ng);再次(使用此代码)。

【讨论】:

你能用纯javascript翻译吗?我尝试将“ng.common.FORM_DIRECTIVES”添加到导入数组,但没有奏效。 更新答案。 这段代码还在打字稿中吧?我正在使用普通的 javascript。 导入在 typescript 中和在 javascript 中是一样的。 我在我的问题中更新了我的 javascript 文件 app.module.js,并从“ng.forms.FormsModule”更改为“ng.common.FORM_DIRECTIVES”。我不能使用答案中的代码,因为它是打字稿。【参考方案2】:

对不起,我发现了错误。通常它与打字稿或角度无关,我只需要在 index.html 文件中添加脚本标签即可加载 forms.umd.js:

<script src="../node_modules/@angular/forms/bundles/forms.umd.js"></script>

现在我可以使用以下代码导入表单模块,并且可以使用 ngModule 功能:

ng.core.NgModule(
  imports: [ ng.platformBrowser.BrowserModule, ng.forms.FormsModule],
  declarations: [ app.AppComponent],
  bootstrap: [ app.AppComponent ]
)

【讨论】:

我遇到了同样的错误。但是通过包含forms.umd.js,我得到了错误:无法读取属性'core_private' of undefined(...) 啊...我发现我的错误:在 index.html 文件中加载主模块脚本后,我必须加载 forms.umd.js 脚本。

以上是关于Angular2 无法使用 javascript 导入 FormsModule的主要内容,如果未能解决你的问题,请参考以下文章

访问 Angular2 JavaScript ES5 组件中的元素

JavaScript/Angular2 LocalStorage 可以得到任何东西

从javascript函数调用angular2方法

Angular2嵌套路由父到子ES5不起作用

Angular2 无法使用延迟模块加载的自定义重用策略

Angular2:无法读取未定义的属性“名称”