搜索文档 /

构建错误

常见的错误

在装饰器上忘记括号

装饰器应该有括号 () 在注释之后。一些例子包括: @Injectable () @Optional () @输入()


             
              指令
              
              
             选择器
              
             
              “my-dir”
             
              
              
             
              
             
              MyDirective
             
              
             
              //错误,应为@Optional()
             
              // @Optional在这里什么也不做,所以如果parent是未定义的,MyDirective就会出错
             
              构造函数
              
             
              @可选父级
               
              父组件
              
             
              
             
              
             
              
复制 复制

常见的错误

无法解析所有参数


             无法解析所有参数
              
             
              “你的班级”
              
             
              
             .确保所有的参数都用Inject装饰或有效
              类型
             注释和
              “你的班级”
             装饰有Injectable。

此异常意味着Angular会对的一个或多个参数产生混淆 YourClass 的构造函数。为了做某事 依赖注入 Angular需要知道要注入的参数的类型。您可以通过指定参数的类来了解这一点。确保:

  • 您正在导入参数的类。
  • 您已经正确地注释了参数或指定了它的类型。

              进口
             
              
             MyService
              
             
              从…起
             
              “我的服务”
              
             
              //别忘了导入我!
             
              组件
              
              
             模板
              
             
               
               你好世界
               
             
              
              
             
              出口
             
              
             
              MyClass
             
              
             
              //服务属于MyService类型
             
              构造函数
              
              服务
               
              MyService
              
             
              
             
              
             
              
复制 复制

有时代码中的循环引用会导致此错误。循环引用意味着两个对象相互依赖,因此无法在彼此之前声明这两个对象。为了解决这个问题,我们可以使用 转发参考 函数。


              进口
             
              
             转发参考
              
             
              从…起
             
              “@angular /核心”
              
             
              组件
              
              
             选择器
              
             
              “我的按钮”
              
             模板
              
             
               
               
指令 转发参考 => MyIcon // MyIcon尚未定义 //当需要MyIcon时,forwardRef解析为MyIcon 构造函数 指令 选择器 “图标” MyIcon 构造函数 containerButton // MyButton已定义
复制 复制

没有ParamType的提供程序


             没有供应商
              
             ParamType
              
             
              
             MyClass -
              >
             ParamType
              

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

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


              进口
             
              
             MyService
              
             
              从…起
             
              “我的服务”
              
             
              组件
              
              
             模板URL
              
             
              “app/app.html”
              
             提供者
              
             
              
             MyService
              
             
              //别忘了我!
             
              
              
             
              
             
              MyApp
             
              
             
              
复制 复制

如果参数是另一个组件或指令(例如,一个父组件),将它添加到提供程序列表将消除错误,但这将有相同的效果 提供程序的多个实例 在上面您将创建组件类的一个新实例,而不会获得对所需组件实例的引用。相反,请确保您希望注入的指令或组件对您的组件可用(例如,如果您希望它是父级,则它实际上是父级)。通过一个例子,这可能是最容易理解的:


             
              组件
              
              
             选择器
              
             
              “my-comp”
              
             模板
              
             
              

指令 转发参考 => MyDir MyComp 构造函数 的名字 “我的组件” 指令 选择器 “[我的目录]” MyDir 构造函数 c MyComp // <——这是兴趣线 //当指令在常规div上时错误,因为没有MyComp在 //组件树,这样就没有MyComp要注入 安慰 日志 “主机组件名称:” + c 的名字 组件 模板 “< my-comp > < / my-comp >” + //MyDir构造函数中没有错误,MyComp是MyDir的父级 “< my-comp my-dir > < / my-comp >” + //MyDir构造函数中没有错误,mycop是MyDir的宿主 “< div my-dir > < / div >” // MyDir构造函数错误 指令 MyComp MyDir MyApp
复制 复制

下面的图表说明了哪些注入器是可用的:


             +-------+ | 应用程序  | +---+---+ | +-------------+------------+ | | +------+------+ +--------+--------+ | Div (MyDir) | | MyComp (MyDir) | < - MyComp可以注射  +-------------+ +--------+--------+ ^ | 没有MyComp注入  +------+------+ | P (MyDir) | < - MyComp都可以从母公司注入  +-------------+
复制 复制

要扩展前面的例子,你可以使用Angular @可选的 注释,如果你不总是期望组件/指令引用:


             
              指令
              
              
             选择器
              
             
              “[我的目录]”
             
              
              
             
              
             
              MyDir
             
              
             
              构造函数
              
              
               可选
               
               
              c
               
              MyComp
              
             
              
             
              //当c为undefined时不再出错
             
              如果
             
              
             c
              
             
              
             
              安慰
              
              日志
              
               
               主机组件的名称:
                $ {
               c
                
               的名字
                
               
              
              
             
              
             
              
             
              
复制 复制

不能绑定到'propertyName',因为它不是一个已知的属性


             可以
              '不绑定'
             propertyName
              “既然不是
             这不是一个已知的属性
              “元素名称”
             元素,并且没有具有相应属性的匹配指令

当您试图在没有该属性的元素上绑定属性时,就会发生这种情况。如果元素是一个组件,或者它上面有一个或多个指令,那么该组件和指令都没有该属性。


              <!——div没有foo属性
             
                <
               div
              
               (foo)
                
                
               酒吧
                
               >
                
               div
               >
复制 复制

没有ControlContainer的提供程序


             没有供应商
              
             控制容器
              
             
              
             NgControlName-
              >
             控制容器
              

此错误是一个更具体的版本 没有供应商 上面的错误。当你使用像NgControlName这样的表单控件而没有指定父控件时,就会发生这种情况 NgForm 或NgFormModel。在大多数情况下,可以通过确保表单控件位于实际表单元素中来解决此问题。NgForm使用 形式 作为一个选择器,这将实例化一个新的NgForm:


             
              组件
              
              
             模板
              
             
              “< >形式”
             
              +
             
              <输入ngControl =“登录”>“
             
              +
             
              “> < /形式”
             
              
              
复制 复制

未发现部件工厂


             找不到组件工厂
              
             
              <
             组件名称
              >

当你试图使用一个没有被导入并添加到ngModule中的组件、提供商管道或指令时,会发生此错误。当你向应用程序中添加一个新组件、提供商、管道或指令时,你必须将它添加到 ngModule src / app / app.module.ts 文件,以便Angular能够使用它。要解决这个错误,你可以将违规的组件、提供商、管道或指令导入到app.module文件中,如果它是提供商,就把它添加到 提供者 数组,对于组件、管道或指令,将其添加到声明数组和 entryComponents 数组中。

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