Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Angular 2 Di不工作-无法解析所有参数

Angular 2 Di不工作-无法解析所有参数
EN

Stack Overflow用户
提问于 2016-04-01 18:21:08
回答 3查看 18.4K关注 0票数 16

我已经创建了一个简单的Hello World应用程序,它工作得很好。但是当我只想添加一个简单的Di来添加一个"Service“时,我得到了以下错误:

angular2.dev.js:23877异常:无法解析'AppComponent'(?)的所有参数。确保所有参数都用Inject修饰或具有有效的类型批注,并且“AppComponent”用Injectable修饰。

Angular2-polyfis.js:469未处理的承诺拒绝:无法解析'AppComponent'(?)的所有参数。确保所有参数都用Inject修饰或具有有效的类型批注,并且“AppComponent”用Injectable修饰。;区域: angular;任务: Promise.then;取值:

我有3个文件

boot.ts:

代码语言:javascript
代码运行次数:0
复制
///<reference path="../../node_modules/angular2/typings/browser.d.ts"/>
import {bootstrap} from 'angular2/platform/browser'
import {AppComponent} from './mainApp'
bootstrap(AppComponent);

mainApp.ts:

代码语言:javascript
代码运行次数:0
复制
import {Component} from 'angular2/core';
import {CourseService} from './course.service';


@Component({
    selector: 'my-app',
    template: 'My First Angular 2 App',
    providers: [CourseService],
})
export class AppComponent {
    constructor(courseService: CourseService) {
    }
} 

course.service.ts:

代码语言:javascript
代码运行次数:0
复制
export class CourseService {
   public getCourses(): string[] {
      let courses: string[] = ["Course 1", "Course 2", "Course 3"];
      return courses;
  }
}

当我从构造函数中删除then参数时,一切都很正常。

这是我的HTML文档的头部,我使用angular 2 beta 13:

代码语言:javascript
代码运行次数:0
复制
<script src="~/Scripts/es6-shim.min.js"></script>
<script src="~/Scripts/system-polyfills.js"></script>
<script src="~/Scripts/shims_for_IE.js"></script>
<script src="~/Scripts/angular2-polyfills.js"></script>
<script src="~/Scripts/system.js"></script>
<script src="~/Scripts/Rx.js"></script>
<script src="~/Scripts/angular2.dev.js"></script>

<!-- 2. Configure SystemJS -->
<script>
    System.config({
        packages: {
            'ScriptsApp/views': {
                defaultExtension: 'js'
            }
        }
    });
</script>
<script>
    System.import('ScriptsApp/views/boot').then(null, console.error.bind(console));
</script>

更新这些现在是我的固定csproj TypeScript设置

代码语言:javascript
代码运行次数:0
复制
<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptJSXEmit>None</TypeScriptJSXEmit>
<TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptModuleKind>CommonJS</TypeScriptModuleKind>
<TypeScriptRemoveComments>False</TypeScriptRemoveComments>
<TypeScriptOutFile />
<TypeScriptOutDir />
<TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
<TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
<TypeScriptSourceMap>True</TypeScriptSourceMap>
<TypeScriptMapRoot />
<TypeScriptSourceRoot />
<TypeScriptExperimentalDecorators>True</TypeScriptExperimentalDecorators>
<TypeScriptEmitDecoratorMetadata>True</TypeScriptEmitDecoratorMetadata>

在最新的VS2015更新中,你也可以使用tsconfig.json,然后TypeScript的解决方案设置将被忽略。我当前的tsconfig.json示例:

代码语言:javascript
代码运行次数:0
复制
 {
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    //Kümmert sich um die Typings das diese entsprechend gefunden werden, keine Reference mehr in boot.js notwendig. Geht aber in VS nicht!
    //"lib": ["es6"],
    "types": [
      "node" //wird für RequireJs benötigt, damit z.b. der Typ gefunden werden kann
    ]
  },
  //Wird für den AwesomeTypeScriptLoad in WebPack benötigt!
   "awesomeTypescriptLoaderOptions": {
     "useWebpackText": true
   },
  "exclude": [
       "node_modules",
       "dist",
       "typings/main",
       "typings/index.d.ts"
     ],
     "compileOnSave": true
   }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-01 20:04:23

更新

在更新操作已经在使用Typescript之后,我建议你在你的tsconfig.json中添加emitDecoratorMetadata: true。这是必要的,因此JavaScript输出会在一个转换后的脚本文件中为装饰器创建元数据。

您需要添加@Inject才能在AppComponent中创建CourseService实例

代码语言:javascript
代码运行次数:0
复制
constructor(@Inject(CourseService) courseService: CourseService) {
}

在使用typescript的情况下,不需要安装@Inject装饰器。Typescript为你做到了这一点。

票数 31
EN

Stack Overflow用户

发布于 2016-08-06 16:35:36

我能够通过添加以下内容来解决这个问题:

代码语言:javascript
代码运行次数:0
复制
import {Inject} from '@angular/core';

在组件中,并对要注入的服务进行注释:

代码语言:javascript
代码运行次数:0
复制
constructor(@Inject(CourseService) courseService: CourseService) {
票数 9
EN

Stack Overflow用户

发布于 2017-05-31 14:52:46

在我的例子中,这个问题是由@angular/forms引起的。如果你在有问题的组件附近使用它,开始检查你的@angular/表单,并找到解决它的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36363279

复制
相关文章
Core官方DI解析(2)-ServiceProvider
ServiceProvider是我们用来获取服务实例对象的类型,它也是一个特别简单的类型,因为这个类型本身并没有做什么,其实以一种代理模式,其核心功能全部都在IServiceProviderEngine实现类中
莫问今朝
2018/11/27
6840
Core官方DI解析(2)-ServiceProvider
ServiceProvider是我们用来获取服务实例对象的类型,它也是一个特别简单的类型,因为这个类型本身并没有做什么,其实以一种代理模式,其核心功能全部都在IServiceProviderEngine实现类中
莫问今朝
2018/12/18
5930
在 redux 中集成 angular di 机制
最近一直在折腾redux相关的东西,算然说官方鼓励的使用方式是将redux和react一起使用,但并不影响我们在其他的mvvm框架中使用它。
littlelyon
2018/10/19
8350
QEMU 2: 参数解析
#一、使用gdb分析QEMU代码# 使用gdb不仅可以很好地调试代码,也可以利用它来动态地分析代码。使用gdb调试QEMU需要做一些准备工作: 1, 编译QEMU时需要在执行configure脚本时的参数中加入--enable-debug。 2, 从QEMU官方网站上下载一个精简的镜像——linux-0.2.img。linux-0.2.img只有8MB大小,启动后包含一些常用的shell命令,用于QEMU的测试。 $wget http://wiki.qemu.org/download/linux-0.2.i
宅蓝三木
2018/02/07
2.7K0
QEMU 2: 参数解析
Core官方DI解析(5)-ServiceProviderEngine
最后来看看前面一直说的Engine(工作引擎),工作引擎接口是IServiceProviderEngine在ServiceProvider的构造函数中看到了根据指定的Mode创建了不同的实现类,下面先来看一下IServiceProviderEngine接口和其实现类的整体结构
莫问今朝
2018/12/19
5530
Core官方DI解析(5)-ServiceProviderEngine
最后来看看前面一直说的Engine(工作引擎),工作引擎接口是IServiceProviderEngine在ServiceProvider的构造函数中看到了根据指定的Mode创建了不同的实现类,下面先来看一下IServiceProviderEngine接口和其实现类的整体结构
莫问今朝
2018/11/30
6030
Core官方DI解析(4)--CallSiteRuntimeResolver
​ CallSiteRuntimeResolver类型是一个创建或获取服务实例的类型,这个类型继承了CallSiteVisitor<TArgument, TResult>这个类型,也是使用了访问者模式,下面一一来解析此类
莫问今朝
2018/12/19
3130
Core官方DI解析(4)--CallSiteRuntimeResolver
这两个类都在其CallSiteVisitor<TArgument, TResult>基类中
莫问今朝
2018/11/29
3710
Core官方DI解析(3)-ServiceCallSite
上一篇说过在整个DI框架中IServiceProviderEngine是核心,但是如果直接看IServiceProviderEngine派生类其实看不出也没什么东西,因为这个类型其实都是调用的其它对象方法,所以我们先来看看其它的类型
莫问今朝
2018/11/28
8460
Spring学习2:依赖注入(DI)
Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。
zstar
2022/06/14
1970
Spring学习2:依赖注入(DI)
Angular Elements 及其工作原理
现在,Angular Elements 这个项目已经在社区引起一定程度的讨论。这是显而易见的,因为 Angular Elements 提供了很多开箱即用的、十分强大的功能:
littlelyon
2018/10/19
2.4K0
Angular Elements 及其工作原理
Angular 2 库
库模块 Angular 被打包成了一个 JavaScript 模块的集合。你可以理解为库模块。 每一个 Angular 库命名跟着 @angular前缀。 通过 npm 包管理器来安装这些库,通过JavaScript import 语句来导入使用的部分。 例如,从 @angular/core 导入 Angular 组件修饰符库如下所示: import { Component } from '@angular/core'; 你也可以使用 JavaScript 的导入语句从 Angular 库中导入
孙亖
2018/06/06
6610
AngularDart4.0 指南- 依赖注入 顶
依赖注入是一个重要的应用程序设计模式。 它的用途非常广泛,几乎所有人都称之为DI。
南郭先生
2018/08/14
5.7K0
ggplot2中的position参数解析
这是position_dodge()的简写形式,它会自动计算需要的dodge宽度。不能设置preserve参数。
R语言数据分析指南
2023/09/24
6860
ggplot2中的position参数解析
Core官方DI解析(3)-ServiceCallSite.md
上一篇说过在整个DI框架中IServiceProviderEngine是核心,但是如果直接看IServiceProviderEngine派生类其实看不出也没什么东西,因为这个类型其实都是调用的其它对象方法,所以我们先来看看其它的类型
莫问今朝
2018/12/19
1.2K0
Windows凭据不工作
如果不是敲错IP、用户名、密码,报凭据不工作,一般情况下执行这几句命令后重启远程服务就正常了
Windows技术交流
2021/06/15
6.1K0
您的凭据不工作 之前用于连接到******的凭据无法工作。请输入新凭据。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/49077665
DannyHoo
2018/09/13
57.3K6
您的凭据不工作 之前用于连接到******的凭据无法工作。请输入新凭据。
tomcat服务启动,但是无法访问网站_java获取request的所有参数
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
全栈程序员站长
2022/09/30
1.2K0
点击加载更多

相似问题

Angular2 DI:注入全局扩展服务(无法解析所有参数)

20

Angular 2- DI不工作

23

Angular2简单DI不工作

13

Angular 2 DI无法解析参数,HTTP客户端模块

20

Angular 2:无法解析AppComponent的所有参数

114
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文