我如何打印 Angular 5 中服务返回的可观察对象数组的值?
How can i print values from an observable array of objects returned by service in Angular 5?
服务将从服务器调用并获取 blob 的信息。我需要打印组件中每个 blob 的详细信息。
angular 服务部分工作正常并获取数据。定义 component.ts 和 html 的正确方法是什么?
浏览器错误
Component.html
<div class="col-md-4" *ngFor="let key of blobsList | keys">
<p>
<a target="_blank" href="{{blobsList[key].blobName}}">
<img src="{{blobsList[key].blobName}}" width="100px" height="100px" />
</a>
</p>
<p><a class="btn btn-default" href="#">{{blobsList[key].blobName}}</a></p>
pipe.ts
@Pipe({
name: 'keys'
})
export class KeysPipe implements PipeTransform {
transform(value: any, args?: any): any {
return Object.keys(value);
}
}
Component.ts
this.blobService.getAllBlobsJS() {
.subscribe(
(val) => {
console.log("..val =", val);
},
response => {
console.log(" in error", response);
},
() => {
console.log(" observable is now completed.");
});
console.log("..values=", this.bList);
}
服务
getAllBlobsJS(): Observable<Azureblob[]> {
return new Observable(obs=>{
var localArr: Azureblob[] = [];
this.blobServiceObj = AzureStorageBlobServiceJS.createBlobService(this.connectionString);
this.blobList = this.blobServiceObj.listBlobsSegmented('acs', null,
function (error, results) {
if (error) {
console.log("**** Error");
obs.error();
} else {
for (var i = 0, blob; blob = results.entries[i]; i++) {
console.log("Blob ", i, blob);
localArr.push(new Azureblob(blob.name));
}
}
console.log("localArr - # of blobs returned=", localArr.length);
return localArr;
});
obs.next(this.blobList);
obs.complete();
})}
this.blobServiceObj.listBlobsSegmented()
没有 return 任何东西。但是你从你的 observable 发出了它 returns (undefined) 的东西。
与从回调内部发出错误的方式相同,您应该发出成功事件并从那里完成:
getAllBlobsJS(): Observable<Azureblob[]> {
return new Observable(obs => {
this.blobServiceObj = AzureStorageBlobServiceJS.createBlobService(this.connectionString);
this.blobServiceObj.listBlobsSegmented('acs', null, (error, results) => {
if (error) {
console.log("**** Error");
obs.error();
} else {
const event = results.entries.map(blob => new Azureblob(blob.name));
obs.next(event);
obs.complete();
}
});
});
}
下一个问题是您试图遍历 blobsList,但是 属性 不存在于您的组件中,并且从未在任何地方填充。
即使是这样,您也需要确保在尝试对其应用密钥管道之前已将其初始化。
不太确定您在这里使用的是什么语法。语法有很多问题:
console.log("..values=", this.bList);
以上行将运行同步。所以你可能没有得到 bList
初始化。您还没有将订阅块的成功回调中的 val
分配给 this.bList
改变这个:
this.blobService.getAllBlobsJS() {
.subscribe(
(val) => {
console.log("..val =", val);
},
response => {
console.log(" in error", response);
},
() => {
console.log(" observable is now completed.");
});
console.log("..values=", this.bList);
}
为了这个正确的语法:
this.blobService.getAllBlobsJS()
.subscribe(
val => {
console.log("..val =", val);
this.bList = val;
},
error => console.log("in error", error),
() => console.log(" observable is now completed.")
);
服务将从服务器调用并获取 blob 的信息。我需要打印组件中每个 blob 的详细信息。
angular 服务部分工作正常并获取数据。定义 component.ts 和 html 的正确方法是什么?
浏览器错误
Component.html
<div class="col-md-4" *ngFor="let key of blobsList | keys">
<p>
<a target="_blank" href="{{blobsList[key].blobName}}">
<img src="{{blobsList[key].blobName}}" width="100px" height="100px" />
</a>
</p>
<p><a class="btn btn-default" href="#">{{blobsList[key].blobName}}</a></p>
pipe.ts
@Pipe({
name: 'keys'
})
export class KeysPipe implements PipeTransform {
transform(value: any, args?: any): any {
return Object.keys(value);
}
}
Component.ts
this.blobService.getAllBlobsJS() {
.subscribe(
(val) => {
console.log("..val =", val);
},
response => {
console.log(" in error", response);
},
() => {
console.log(" observable is now completed.");
});
console.log("..values=", this.bList);
}
服务
getAllBlobsJS(): Observable<Azureblob[]> {
return new Observable(obs=>{
var localArr: Azureblob[] = [];
this.blobServiceObj = AzureStorageBlobServiceJS.createBlobService(this.connectionString);
this.blobList = this.blobServiceObj.listBlobsSegmented('acs', null,
function (error, results) {
if (error) {
console.log("**** Error");
obs.error();
} else {
for (var i = 0, blob; blob = results.entries[i]; i++) {
console.log("Blob ", i, blob);
localArr.push(new Azureblob(blob.name));
}
}
console.log("localArr - # of blobs returned=", localArr.length);
return localArr;
});
obs.next(this.blobList);
obs.complete();
})}
this.blobServiceObj.listBlobsSegmented()
没有 return 任何东西。但是你从你的 observable 发出了它 returns (undefined) 的东西。
与从回调内部发出错误的方式相同,您应该发出成功事件并从那里完成:
getAllBlobsJS(): Observable<Azureblob[]> {
return new Observable(obs => {
this.blobServiceObj = AzureStorageBlobServiceJS.createBlobService(this.connectionString);
this.blobServiceObj.listBlobsSegmented('acs', null, (error, results) => {
if (error) {
console.log("**** Error");
obs.error();
} else {
const event = results.entries.map(blob => new Azureblob(blob.name));
obs.next(event);
obs.complete();
}
});
});
}
下一个问题是您试图遍历 blobsList,但是 属性 不存在于您的组件中,并且从未在任何地方填充。 即使是这样,您也需要确保在尝试对其应用密钥管道之前已将其初始化。
不太确定您在这里使用的是什么语法。语法有很多问题:
console.log("..values=", this.bList);
以上行将运行同步。所以你可能没有得到 bList
初始化。您还没有将订阅块的成功回调中的 val
分配给 this.bList
改变这个:
this.blobService.getAllBlobsJS() {
.subscribe(
(val) => {
console.log("..val =", val);
},
response => {
console.log(" in error", response);
},
() => {
console.log(" observable is now completed.");
});
console.log("..values=", this.bList);
}
为了这个正确的语法:
this.blobService.getAllBlobsJS()
.subscribe(
val => {
console.log("..val =", val);
this.bList = val;
},
error => console.log("in error", error),
() => console.log(" observable is now completed.")
);