搜索文件 /

构建错误

常见的错误

忘记装饰师的括号

装饰器应该有括号 () 在注释之后。一些例子包括: @injectable() @可选的() @输入() , 等等。


             @
              指示
              
              {
             选择器
              
             
              '我的dir'
             
              }
              的)
             
              班级
             
              言论自说
             
              {
             
              //错误,应该是@optional()
             
              // @optional在此处都不做,所以如果父级未定义,则表示MyDirective会错误
             
              构造函数
              
             
              @optional父母
               
              parentcomponent.
              的)
             
              {
             
              }
             
              }
复制 复制

常见错误

无法解决所有参数


             无法解决所有参数
              为了
             
              '你的班'
              
             
              的)
             。确保所有参数都以注入或有效装饰
              类型
             注释和那个
              '你的班'
             装饰有注射的。

此异常意味着角度对一个或多个参数混淆 你的班 '建设者。为了做 依赖注入 角度需要知道要注入参数的类型。通过指定参数的类来允许Angular知道这一点。确保:

  • 您正在导入参数的类。
  • 您已正确注释参数或指定其类型。

              进口
             
              {
             myservice.
              }
             
              
             
              '我的服务'
              ;
             
              //别忘了进口我!
             @
              零件
              
              {
             模板
              
             
               `
               你好世界
               `
             
              }
              的)
             
              出口
             
              班级
             
              我的课
             
              {
             
              //服务是myservice类型
             
              构造函数
              
              服务
               
              myservice.
              的)
             
              {
             
              }
             
              }
复制 复制

有时,您的代码中的循环引用可能会导致此错误。循环引用意味着两个对象彼此相互依赖,因此没有办法彼此之前申报。要解决这个问题,我们可以使用 forward 功能内置于角度。


              进口
             
              {
             forward
              }
             
              
             
              '@ Angular / Core'
              ;
             @
              零件
              
              {
             选择器
              
             
              '我的按钮'
              
             模板
              
             
               `
               
<图标> <输入类型=“按钮”/> ` 指令 [ forward 的) => 米西昂 的) ] //毫无遗留尚未定义 } 的) // forwardref在需要Myicon时将其作为Myicon解析为MyIcon 班级 myButton. { 构造函数 的) { } } @ 指示 { 选择器 '图标' } 的) 班级 米西昂 { 构造函数 ContainerButton. myButton. 的) { } //已定义mybutton }
复制 复制

没有paramtype提供商


             没有提供者
              为了
             paramtype.
              
             
              
             我的课 -
              >
             paramtype.
              的)

这意味着Angular知道它应该注入的参数类型,但它不知道如何注入它。

如果参数是服务,请确保已将指定的类添加到应用程序可用的提供程序列表中:


              进口
             
              {
             myservice.
              }
             
              
             
              '我的服务'
              ;
             @
              零件
              
              {
             templateURL.
              
             
              'app / app.html'
              
             提供者
              
             
              [
             myservice.
              ]
             
              //别忘了我!
             
              }
              的)
             
              班级
             
              myapp.
             
              {
             
              }
复制 复制

如果参数是另一个组件或指令(例如,父组件),将其添加到提供程序列表中会使错误消失,但这将具有与此相同的效果 多个提供者实例 更多。您将创建组件类的新实例,并且您将无法参考所需的组件实例。相反,确保您希望注入的指令或组件可供您的组件(例如,如果您期望成为父母,它实际上是一个父级)。这可能更容易理解一个例子:


             @
              零件
              
              {
             选择器
              
             
              '我的comp'
              
             模板
              
             
              '

' 指令 [ forward 的) => 迈德尔 的) ] } 的) 班级 my { 构造函数 的) { 姓名 = '我的组件' ; } } @ 指示 { 选择器 '[我的dir]' } 的) 班级 迈德尔 { 构造函数 C my 的) { // < - 这是兴趣线 //指令在常规div时错误,因为没有mycomp //组件树,因此没有mycomp注入 安慰 日志 '主机组件的名称:' + C 姓名 的) ; } } @ 零件 { 模板 + // MyDir构造函数没有错误,MyComp是MyDir的父级 + // mydir构造函数没有错误,mycomp是mydir的主机

// mydir构造函数中的错误 指令 [ my 迈德尔 ] } 的) 班级 myapp. { }
复制 复制

以下是说明注射器可用的图:


             + ------- + |App |+ --- + --- + |+ ------------------------- + ||+ ------ + ------ + + -------- + -------- + |div(mydir)||MyComp(MyDir)|< -  Mycomp可以注射+ ------------- + + -------- + -------- + ^ | No MyComp to inject +------+------+ | P (MyDir) | <- MyComp can be injected from parent +-------------+
复制 复制

要在前面的示例中展开,您可以使用Angular @可选的 注释如果您并不总是期望组件/指令参考:


             @
              指示
              
              {
             选择器
              
             
              '[我的dir]'
             
              }
              的)
             
              班级
             
              迈德尔
             
              {
             
              构造函数
              
              @
               可选的
               
               的)
              C
               
              my
              的)
             
              {
             
              //如果c未定义,则不再错误
             
              如果
             
              
             C
              的)
             
              {
             
              安慰
              
              日志
              
               `
               主机组件的名称:
                $ {
               C
                
               姓名
                }
               `
              的)
              ;
             
              }
             
              }
             
              }
复制 复制

无法绑定到“propertyname”,因为它不是已知属性


             
              't绑定'
             propertyname.
              '因为它不是'
             是一个已知的属性
              'ElementName'
             元素和没有相应属性的匹配指令

当您尝试并在没有该属性的元素上绑定属性时会发生这种情况。如果元素是组件或有一个或多个指令,则组件和指令都不具有该属性。


              <! -  div没有'foo'属性 - >
             
                <
               div
              
               [Foo]
                =
                
               酒吧
                
               >
                
               div
               >
复制 复制

没有ControlContainer的提供者


             没有提供者
              为了
             ControlContainer.
              
             
              
             ngcontrolname  -
              >
             ControlContainer.
              的)

此错误是更具体的版本 没有提供者 上面的错误。在不指定父母的情况下使用像NGControlName这样的表单控件时会发生这种情况 NGForm. 或ngformModel。在大多数情况下,可以通过确保您的表单控件在实际表单元素中来解决这方面。ngform使用 形式 作为选择器,因此这将实例化一个新的ngform:


             @
              零件
              
              {
             模板
              
             
              '<表格>'
             
              +
             
              '<输入ngcontrol =“登录”>'
             
              +
             
              ''
             
              }
              的)
复制 复制

没有找到组件工厂


             没有找到组件工厂
              为了
             
              <
             组件名称
              >

当您尝试使用未导入的组件,提供程序管道或指令并将其添加到NgModule时,会发生此错误。每当您添加新组件,提供程序,管道或指令到您的应用时,必须将其添加到 ngmodule. 在里面 src / app / app.module.ts Angular的文件能够使用它。要修复此错误,您可以将违规组件,提供程序,管道或指令导入App.Module文件,然后如果它是提供程序将其添加到 提供者 数组和组件,管道或指令将其添加到声明数组中和 入学股关系 大批。

以前的
远程调试
下一个
运行时错误
Baidu