我究竟做错了什么?
import {bootstrap, Component} from 'angular2/angular2'
@Component({
selector: 'conf-talks',
template: `<div *ngFor="talk of talks">
{{talk.title}} by {{talk.speaker}}
<p>{{talk.description}}
</div>`
})
class ConfTalks {
talks = [ {title: 't1', speaker: 'Brian', description: 'talk 1'},
{title: 't2', speaker: 'Julie', description: 'talk 2'}];
}
@Component({
selector: 'my-app',
directives: [ConfTalks],
template: '<conf-talks></conf-talks>'
})
class App {}
bootstrap(App, [])
Run Code Online (Sandbox Code Playgroud)
错误是
EXCEPTION: Template parse errors:
Can't bind to 'ngFor' since it isn't a known native property
("<div [ERROR ->]*ngFor="talk of talks">
Run Code Online (Sandbox Code Playgroud) 从角度4.4升级到5.0并且在将所有HttpModule和Http更新为HttpClientModule后,我开始出现此错误.
我还再次添加了HttpModule,以确保它不是由于一些依赖,但它没有解决问题
在app.module中,我已经正确设置了
import { HttpModule } from '@angular/http';
import { HttpClientModule, HttpClient } from '@angular/common/http';
.
.
.
@NgModule({
imports: [
BrowserModule,
HttpClientModule,
HttpModule,
BrowserAnimationsModule,
FormsModule,
AppRoutingModule,
.
.
.
Run Code Online (Sandbox Code Playgroud)
我不知道这个错误来自何处,或者我不知道如何弄清楚它的内在.我也有一个警告(也把它放在下面)也许是相关的.
Error: StaticInjectorError[HttpClient]:
StaticInjectorError[HttpClient]:
NullInjectorError: No provider for HttpClient!
at _NullInjector.get (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:5665)
at resolveToken (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:5953)
at tryResolveToken (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:5895)
at StaticInjector.get (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:5766)
at resolveToken (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:5953)
at tryResolveToken (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:5895)
at StaticInjector.get (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:5766)
at resolveNgModuleDep (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:15328)
at _createClass (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:15373)
at _createProviderInstance$1 (vendor.js?v=mekBM8IVBK72-MIZOVSTJizGi_TD_xK3uhPOCRlEHwg:15339)
Run Code Online (Sandbox Code Playgroud)
警告信息:
./node_modules/@angular/Common/esm5/http.js
There are multiple modules with names that only …Run Code Online (Sandbox Code Playgroud) Angular 1不接受onchange事件,但只接受onchange()事件.
另一方面,Angular 2接受两者ng-change()和(change)事件,它们似乎都在做同样的事情.
有什么不同?
哪一个最适合表现?
ngModelChange:
<input type="text" pInputText class="ui-widget ui-text"
(ngModelChange)="clearFilter()" placeholder="Find"/>
Run Code Online (Sandbox Code Playgroud)
与变化:
<input type="text" pInputText class="ui-widget ui-text"
(change)="clearFilter()" placeholder="Find"/>
Run Code Online (Sandbox Code Playgroud) 我正在使用Angular 4,我在控制台中收到错误:
无法绑定到'ngModel',因为它不是'input'的已知属性
我该如何解决这个问题?
我很难尝试导入lodash模块.我使用npm + gulp设置我的项目,并继续击中同一面墙.我尝试过常规的lodash,还有lodash-es.
lodash npm包:(包根文件夹中有一个index.js文件)
import * as _ from 'lodash';
Run Code Online (Sandbox Code Playgroud)
结果是:
error TS2307: Cannot find module 'lodash'.
Run Code Online (Sandbox Code Playgroud)
lodash-es npm包:(在lodash.js中有一个defaut导出我的包根文件夹)
import * as _ from 'lodash-es/lodash';
Run Code Online (Sandbox Code Playgroud)
结果是:
error TS2307: Cannot find module 'lodash-es'.
Run Code Online (Sandbox Code Playgroud)
gulp任务和webstorm都报告了同样的问题.
有趣的是,这不会返回错误:
import 'lodash-es/lodash';
Run Code Online (Sandbox Code Playgroud)
......但当然没有"_"......
我的tsconfig.json文件:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}
Run Code Online (Sandbox Code Playgroud)
我的gulpfile.js:
var gulp = require('gulp'),
ts = require('gulp-typescript'),
uglify = require('gulp-uglify'),
sourcemaps = require('gulp-sourcemaps'),
tsPath = …Run Code Online (Sandbox Code Playgroud) 在我的Angular 2应用程序中,当我向下滚动页面并单击页面底部的链接时,它确实会更改路径并将我带到下一页但它不会滚动到页面顶部.结果,如果第一页很长而第二页的内容很少,则给人的印象是第二页缺少内容.由于只有当用户滚动到页面顶部时内容才可见.
我可以在组件的ngInit中将窗口滚动到页面顶部但是,有没有更好的解决方案可以自动处理我的应用程序中的所有路径?
typescript angular2-directives angular2-template angular2-routing angular
我正在使用Angular 2+和Angular CLI.
如何为我的项目添加font-awesome?
大家好我在Angular上创建HTTP请求,但我不知道如何添加url参数(查询字符串).
this.http.get(StaticSettings.BASE_URL).subscribe(
(response) => this.onGetForecastResult(response.json()),
(error) => this.onGetForecastError(error.json()),
() => this.onGetForecastComplete()
);
Run Code Online (Sandbox Code Playgroud)
现在我的StaticSettings.BASE_URL就像一个没有查询字符串的网址,如:http://atsomeplace.com/ 但我希望它是http://atsomeplace.com/?var1=val1&var2=val2
哪个var1和var2适合我的Http请求对象?我想像对象一样添加它们.
{
query: {
var1: val1,
var2: val2
}
}
Run Code Online (Sandbox Code Playgroud)
然后只是Http模块完成工作将其解析为URL查询字符串.
请向我解释为什么我一直收到这个错误: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
显然,我只是在开发模式下获得它,它不会在我的生产版本中发生,但它非常烦人,而我根本不理解在我的开发环境中出现错误的好处 - 不会出现在prod上 - - 可能是因为我缺乏理解.
通常,修复很容易,我只是将错误导致代码包装在setTimeout中,如下所示:
setTimeout(()=> {
this.isLoading = true;
}, 0);
Run Code Online (Sandbox Code Playgroud)
或者使用如下构造函数强制检测更改constructor(private cd: ChangeDetectorRef) {}::
this.isLoading = true;
this.cd.detectChanges();
Run Code Online (Sandbox Code Playgroud)
但为什么我经常遇到这个错误?我想了解它,以便将来可以避免这些hacky修复.
为什么这个组件在这个简单的插件中
@Component({
selector: 'my-app',
template: `<div>I'm {{message}} </div>`,
})
export class App {
message:string = 'loading :(';
ngAfterViewInit() {
this.updateMessage();
}
updateMessage(){
this.message = 'all done loading :)'
}
}
Run Code Online (Sandbox Code Playgroud)
投掷:
例外:App @ 0:5'中的表达式'我'{{message}}在检查后发生了变化.上一个值:'我正在加载:('.当前值:'我已经完成了加载:)'在[我是{{message}}在App @ 0:5中]
什么时候我正在做的是在我的视图启动时更新一个简单的绑定?
angular ×10
typescript ×6
javascript ×2
angular-cli ×1
html ×1
http ×1
lodash ×1
ngfor ×1
webpack ×1