在我的Angular 2应用程序中,我收到一个错误:
无法读取undefined的属性'title'.
这是一个非常简单的组件,只是试图在这里工作.它击中我的API控制器(奇怪地多次),它似乎在返回一个对象后点击回调.我的console.log输出了我期望的对象.这是完整的错误:
TypeError: Cannot read property 'title' of undefined at AbstractChangeDetector.ChangeDetector_About_0.detectChangesInRecordsInternal (eval at(http://localhost:55707/lib/angular2/bundles/angular2.dev.js:10897:14), :31:26) at AbstractChangeDetector.detectChangesInRecords (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8824:14) at AbstractChangeDetector.runDetectChanges (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8807:12) at AbstractChangeDetector._detectChangesInViewChildren (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8877:14) at AbstractChangeDetector.runDetectChanges (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8811:12) at AbstractChangeDetector._detectChangesContentChildren (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8871:14) at AbstractChangeDetector.runDetectChanges (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8808:12) at AbstractChangeDetector._detectChangesInViewChildren (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8877:14) at AbstractChangeDetector.runDetectChanges (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8811:12) at AbstractChangeDetector.detectChanges (http://localhost:55707/lib/angular2/bundles/angular2.dev.js:8796:12)
该服务(about.service.ts):
import {Http} from 'angular2/http'; import {Injectable} from 'angular2/core'; import {AboutModel} from './about.model'; import 'rxjs/add/operator/map'; @Injectable() export class AboutService { constructor(private _http: Http) { } get() { return this._http.get('/api/about').map(res => { console.log(res.json()); // I get the error on the line above but this code is still hit. returnres.json(); }); } }
组件(about.component.ts):
import {Component, View, OnInit} from 'angular2/core'; import {AboutModel} from './about.model'; import {AboutService} from './about.service'; import {HTTP_PROVIDERS} from 'angular2/http'; @Component({ selector: 'about', providers: [HTTP_PROVIDERS, AboutService], templateUrl: 'app/about/about.html' }) export class About implements IAboutViewModel, OnInit { public about: AboutModel; constructor(private _aboutService: AboutService) {} ngOnInit() { this._aboutService.get().subscribe((data: AboutModel) => { this.about = data; }); } } export interface IAboutViewModel { about: AboutModel; }
的index.html
Mark Rajcok.. 57
请在下次包含您的视图和型号(app/about/about.html和about.model).
如果要返回一个数组,可以使用asyncPipe,它"订阅一个Observable或Promise并返回它发出的最新值.当发出一个新值时,异步管道标记要检查组件的变化"因此视图将使用新值更新.
如果要返回基本类型(字符串,数字,布尔值),还可以使用asyncPipe.
如果你要返回一个对象,我不知道有什么方法可以使用asyncPipe,我们可以使用异步管道和安全导航操作符 ?.
,如下所示:
{{(objectData$ | async)?.name}}
但这看起来有点复杂,我们必须为我们想要显示的每个对象属性重复这一点.
正如注释中提到的@pixelbits,您可以subscribe()
在控制器中的observable中将包含的对象存储到组件属性中.然后在模板中使用安全导航操作符或NgIf:
service.ts
import {Injectable} from 'angular2/core';
import {Http} from 'angular2/http';
import 'rxjs/add/operator/map'; // we need to import this now
@Injectable()
export class MyService {
constructor(private _http:Http) {}
getArrayData() {
return this._http.get('./data/array.json')
.map(data => data.json());
}
getPrimitiveData() {
return this._http.get('./data/primitive.txt')
.map(data => data.text()); // note .text() here
}
getObjectData() {
return this._http.get('./data/object.json')
.map(data => data.json());
}
}
app.ts
@Component({
selector: 'my-app',
template: `
array data using '| async':
{{item}}
primitive data using '| async': {{primitiveData$ | async}}
object data using .?: {{objectData?.name}}
object data using NgIf: {{objectData.name}}`
providers: [HTTP_PROVIDERS, MyService]
})
export class AppComponent {
constructor(private _myService:MyService) {}
ngOnInit() {
this.arrayData$ = this._myService.getArrayData();
this.primitiveData$ = this._myService.getPrimitiveData();
this._myService.getObjectData()
.subscribe(data => this.objectData = data);
}
}
数据/ array.json
[ 1,2,3 ]
数据/ primitive.json
Greetings SO friends!
数据/ object.json
{ "name": "Mark" }
输出:
array data using '| async': 1 2 3 primitive data using '| async': Greetings SO friends! object data using .?: Mark object data using NgIf: Mark
Plunker
请在下次包含您的视图和型号(app/about/about.html和about.model).
如果要返回一个数组,可以使用asyncPipe,它"订阅一个Observable或Promise并返回它发出的最新值.当发出一个新值时,异步管道标记要检查组件的变化"因此视图将使用新值更新.
如果要返回基本类型(字符串,数字,布尔值),还可以使用asyncPipe.
如果你要返回一个对象,我不知道有什么方法可以使用asyncPipe,我们可以使用异步管道和安全导航操作符 ?.
,如下所示:
{{(objectData$ | async)?.name}}
但这看起来有点复杂,我们必须为我们想要显示的每个对象属性重复这一点.
正如注释中提到的@pixelbits,您可以subscribe()
在控制器中的observable中将包含的对象存储到组件属性中.然后在模板中使用安全导航操作符或NgIf:
service.ts
import {Injectable} from 'angular2/core';
import {Http} from 'angular2/http';
import 'rxjs/add/operator/map'; // we need to import this now
@Injectable()
export class MyService {
constructor(private _http:Http) {}
getArrayData() {
return this._http.get('./data/array.json')
.map(data => data.json());
}
getPrimitiveData() {
return this._http.get('./data/primitive.txt')
.map(data => data.text()); // note .text() here
}
getObjectData() {
return this._http.get('./data/object.json')
.map(data => data.json());
}
}
app.ts
@Component({
selector: 'my-app',
template: `
array data using '| async':
{{item}}
primitive data using '| async': {{primitiveData$ | async}}
object data using .?: {{objectData?.name}}
object data using NgIf: {{objectData.name}}`
providers: [HTTP_PROVIDERS, MyService]
})
export class AppComponent {
constructor(private _myService:MyService) {}
ngOnInit() {
this.arrayData$ = this._myService.getArrayData();
this.primitiveData$ = this._myService.getPrimitiveData();
this._myService.getObjectData()
.subscribe(data => this.objectData = data);
}
}
数据/ array.json
[ 1,2,3 ]
数据/ primitive.json
Greetings SO friends!
数据/ object.json
{ "name": "Mark" }
输出:
array data using '| async': 1 2 3 primitive data using '| async': Greetings SO friends! object data using .?: Mark object data using NgIf: Mark
Plunker
它看起来像你about.title
在视图中引用,about.html
但about
只有在http
请求完成后才会实例化变量.为避免此错误,您可以about.html
使用
以前的答案是正确的.在模板中使用变量之前,您需要检查变量是否已定义.使用HTTP请求需要时间来定义它.使用*ngIf来检查.示例是通过https://angular.io/docs/ts/latest/tutorial/toh-pt5.html从角度提供的 ,示例是http://plnkr.co/edit/?p=preview
{{hero.name}} details!
你可以查看app/hero-detail.component [ts和html]
推荐阅读
如何解决《线条图用灰色和黑色虚线》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Json.Net序列化类名而不是内部属性》经验,为你挑选了1个好方法。 ... [详细] 如何解决《MATLAB对数组值表达式的所有元素求和》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在Jinja扩展中解析和注入其他节点?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用LuaC函数时减少重复的任何提示》经验,为你挑选了1个好方法。 ... [详细] 如何解决《保持一个类对象永远活着》经验,为你挑选了1个好方法。 ... [详细] 如何解决《C++指向文件的向量》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Travis-CI:在.travis.yml文件的deploy部分中使用环境变量》经验,为你挑选了0个好方法。 ... [详细] 如何解决《'Classname<T>,T:Classname<T>'的作用是什么?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《XamariniOSC#下划线UIButton文本》经验,为你挑选了1个好方法。 ... [详细] 如何解决《不包含拆分方法》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在Java8函数样式中,如何将值映射到现有的键值对》经验,为你挑选了1个好方法。 ... [详细] 如何解决《列出仅在当前目录中超过x天的所有文件》经验,为你挑选了1个好方法。 ... [详细] 如何解决《重新启动后,Kafka主题不再存在》经验,为你挑选了1个好方法。 ... [详细] 如何解决《有没有办法将现有的"特征"分配给史诗?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《BEM与SASS和:悬停》经验,为你挑选了2个好方法。 ... [详细] 如何解决《如何使用FOSHttpCacheBundle和Varnish进行缓存标记?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《tableview使用swift2.0在ios开发中不显示单元分隔符行.xcode7》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在elixir的Ecto查询中使用"case-when"?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用未部署在Azure中的应用程序访问AzureKeyVault存储的密钥》经验,为你挑选了1个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1我能在QNX中使用C++ 11吗?
- 2为C库创建Haxe hxcpp包装器
- 3Haskell函数,可替代地应用输入一元函数
- 4firefox插件更改响应代码
- 5复杂度小于O(n)的平均算法
- 6mysql-connector-python,mysql-connector-python-rf和mysql-connector-repackaged之间有什么区别?
- 7WPF从C#代码设置文本框边框颜色
- 8番石榴Ratelimiter tryAcquire仅在第一次调用(任意数量的许可)时返回true?
- 9require.main和module之间有什么区别?
- 10如何检测设备上是否启用了"开发人员设置"?
- 11Python - 全球有什么优先权?
- 12保存gtk窗口位置
- 13如何在Python中将元素(字符串)转换为元组中的整数
- 14Ruby的CSV.open缓冲到内存并一次写入所有内容吗?
- 15Spring sseEmitter,在调用方法发送后不会立即发送事件
- 16从另一个脚本运行python脚本永远重复
- 17与CloudFront结合使用时,AWS S3标准不频繁访问与减少冗余存储类别?
- 18适用于匿名移动应用程序的正确护照策略
- 19Laravel不会将我的域名传递给MailGun驱动程序,因此我无法发送邮件
- 20通过this.history.pushState()传递状态
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有