在一个组件中,我想从 FireStore 中提取一系列项目,例如。从 0 到 5,从 5 到 10 等等。我在 FireStore 的文档中找到了这个,但是他们不使用 AngularFire2,所以我尝试重构时变得更加混乱。我通过简单的splice()'ing使它工作:
service ->
topFirstScores(): AngularFirestoreCollection<Score> {
return this.fireRef.collection('scores', r => r
.orderBy('score', 'desc').limit(6)
);
}
component ->
$scores = new Subject();
this.scores$ = this.$scores.asObservable();
if (this.scores === 'first') {
this.scoreS.topFirstScores().valueChanges().take(1)
.subscribe(_ => this.$scores.next(_.splice(0, 3)))
} else {
this.scoreS.topFirstScores().valueChanges().take(1)
.subscribe(_ => this.$scores.next(_.splice(3, 3)))
}
Run Code Online (Sandbox Code Playgroud)
但这似乎更像是一种解决方法。谁能翻译一下:
var first = db.collection("cities")
.orderBy("population")
.limit(25);
return first.get().then(function (documentSnapshots) {
// Get the last visible document
var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length-1]; …Run Code Online (Sandbox Code Playgroud) 愚蠢的问题警报:
在主app.module.ts文件中,我们使用定义了顶层组件的值设置bootstrap参数。因此:
@NgModule({
bootstrap: [AppComponent]
})
Run Code Online (Sandbox Code Playgroud)
我们告诉我们,当使用我们的模块时,我们的顶级组件是AppComponent。但是为什么要排列成阵列?可以有更多的顶级组件吗?
初始情况如下:在node_moduls我的项目文件夹中,有一个名为的模块,@example其中包含我想在应用程序中使用的一些组件。组件的数量各不相同,因此有必要动态说明模块中包含哪些组件。该example.module.ts文件如下所示:
import { NgModule } from '@angular/core';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { FirstModule } from 'EXAMPLE_PATH';\nimport { SecondModule } from 'EXAMPLE_PATH';\nimport { ThirdModule } from 'EXAMPLE_PATH';\nimport { FourthModule } from 'EXAMPLE_PATH';\n\n\nconst MODULES = [\n FirstModule,\n SecondModule,\n ThirdModule,\n FourthModule \n];\n\n@NgModule({\n imports: [NgbModule.forRoot(), ...MODULES],\n exports: [NgbModule, ...MODULES],\n providers: [ExampleService]\n})\nexport class ExampleModule {\n}\nRun Code Online (Sandbox Code Playgroud)\n\n该MODULES数组包含所包含的所有组件。通常,模块会通过以下方式导入到应用程序中app.module.ts
import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { ExampleModule } from '@example/example-module';\n\nimport …Run Code Online (Sandbox Code Playgroud) 我的主要目标是当用户向下滚动时,我需要获取当前的scrollTop 偏移量。用户可以通过鼠标单击滚动条或使用鼠标滚轮进行滚动,因此当用户这样做时,我想更新ejQuery()take()上的和skip()(或page())参数以触发 http get 并为该视图提供数据。
使用 SyncFusion 1
下面的代码是我尝试向ejTreeGrid分配一个指令,scroll通过HostListener()监视事件,但正如用户 PierreDuc 提到的,ejTreeGrid实现了它的自定义滚动条,所以默认的滚动条不会触发。PierreDuc 建议使用getScrollTopOffset方法,但我仍然需要在每次用户执行滚动操作时触发它......
指令被附加到 SyncFusion 的ejTreeGrid组件以监视scroll事件,但它不会触发。事件一切正常click- 在该子组件上触发。可能出了什么问题?
尝试过:
@HostListener('scrollY', ['$event'])
onScroll(e) {
console.log(e)
}
@HostListener('onscroll', ['$event'])
onScroll2(e) {
console.log(e)
}
@HostListener('scroll', ['$event'])
onScroll3(e) {
console.log(e)
}
@HostListener('scrollX', ['$event'])
onScroll4(e) {
console.log(e)
}
Run Code Online (Sandbox Code Playgroud)
这有效:
@HostListener('click', ['$event'])
onClick(e) {
console.log('clicked')
console.log(e)
}
Run Code Online (Sandbox Code Playgroud)
更新:
还补充道:
@HostListener('mousewheel', ['$event'])
onScroll5(e) {
console.log('mousewheel')
}
@HostListener('DOMMouseScroll', …Run Code Online (Sandbox Code Playgroud) 我已经成功安装了Carrierwave.我可以从终端看到它:gem list carrierwave=>
*** LOCAL GEMS ***
carrierwave (1.0.0.rc)
Run Code Online (Sandbox Code Playgroud)
但是我仍然无法生成上传器...如果我rails g uploader Picture在终端运行我就得到了Could not find generator 'uploader'.
我唯一的想法是宝石之间可能存在一些冲突.这是gem文件:
source 'https://rubygems.org'
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
gem 'puma', '~> 3.0'
gem 'bootstrap-sass', '~> 3.3.6'
gem 'autoprefixer-rails', '6.4.0.3'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'jquery-rails'
gem 'jquery-ui-rails'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'carrierwave', '~> 0.11.2'
gem 'mini_magick', '~> 4.3'
group :development, :test do
gem …Run Code Online (Sandbox Code Playgroud) 我想知道为什么如果我使用var或let关键字声明变量,我会得到这个编译错误?我的意思是,这很顺利:
export class AppComponent {
refreshClickStream$: any;
constructor(){
}
Run Code Online (Sandbox Code Playgroud)
虽然这带来了错误:
export class AppComponent {
var refreshClickStream$: any;
constructor(){
}
Run Code Online (Sandbox Code Playgroud) 我显示在另一个组件 (team-announcements.component) 中创建的模板中的数据...在主 team.component.ts 中,我使用 team-announcements 选择器,并添加 [announcement]="announcements" 和ngFor="让公告公告"加载数据。如果数组没有返回数据 IE 没有公告,如何显示“无公告”之类的占位符?
这是我在 team.component.html 中加载公告的位置。数据通过 API 服务提供,并在“team.component.ts”中检索,相关对象的 HTML 如下。
team.component.ts(获取公告函数):
getAnnouncements() {
this.teamsService.getTeamAnnouncements(this.team.slug)
.subscribe(announcements => this.announcements = announcements);
console.log("announcements", this.announcements);
}
Run Code Online (Sandbox Code Playgroud)
team.component.html
<div class="team-announcement">
<div class="announcement-title">Message of the Day</div>
<app-team-announcements
[announcement]="announcement"
*ngFor="let announcement of announcements">
</app-team-announcements>
</div>
Run Code Online (Sandbox Code Playgroud)
这就是上面的“app-team-announcements”如何在单独的文件“team-announcement.component.html”中模板化并导出,然后在上面的代码中使用......
团队公告.component.ts
import { Component, EventEmitter, Input, Output, OnInit, OnDestroy } from '@angular/core';
import { Team, Announcement, User, UserService } from '../core';
import { Subscription } from 'rxjs';
@Component({
selector: 'app-team-announcements',
templateUrl: './team-announcement.component.html'
}) …Run Code Online (Sandbox Code Playgroud) 我主要担心的是$event这行显示错误:
starClick($event) {
Run Code Online (Sandbox Code Playgroud)
参数$ event隐式具有'any'类型
我也想知道 - 根据Angular2文档,什么$event是捕获事件对象,所以让我问一个愚蠢的问题 - 为什么我们不调用它$object?因为它让我感到困惑,直到我终于意识到这里发生了什么......
import { Component } from '@angular/core';
@Component({
moduleId: module.id,
selector: 'stars',
template: `
<span class="glyphicon glyphicon-star-empty" (click)= "starClick($event)"></span>
`
})
export class StarsComponent {
starClick($event) {
if($event.target.className == "glyphicon glyphicon-star-empty") {
$event.target.className = "glyphicon glyphicon-star";
}
else{
$event.target.className = "glyphicon glyphicon-star-empty";
}
}
}
Run Code Online (Sandbox Code Playgroud) 从教程中,讲师提出了这个:
<span class="glyphicon" [class.glyphicon-star-empty]="isFavorite" [class.glyphicon-star]="!isFavorite" (click)="toggleClass()"></span>
Run Code Online (Sandbox Code Playgroud)
零件:
isFavorite = false;
toggleClass() {
this.isFavorite != this.isFavorite;
}
Run Code Online (Sandbox Code Playgroud)
<span class="glyphicon" [ngClass]="classes" (click)="toggleClasses()"></span>
Run Code Online (Sandbox Code Playgroud)
零件:
classes = "glyphicon-star-empty";
toggleClasses() {
this.classes == "glyphicon-star-empty"? this.classes = "glyphicon-star" : this.classes = "glyphicon-star-empty";
}
Run Code Online (Sandbox Code Playgroud)
两种方式都按预期工作,但我觉得从性能角度来看,我的方式并不是很好,因为我正在使用循环,对吧?
对不起,如果答案可能只是"是".我只是想确定它是如何工作的(特别是对所有那些Ng指令感兴趣,比如ngModel,ngClass).
谢谢
我想知道是否有可能检查可观察值是否收到任何值。而且我想要这个而不订阅它,因为我太懒了以至于无法覆盖当前代码。问题是我在父组件中创建了可观察对象,然后将其传递给子组件。而且我只需要一件小事,因此订阅该书似乎是不必要的...
父组件:
adverts$: Observable<advert[]>;
ngOnInit() {
this.adverts$ = this.advertService.advertsPerUser();
Run Code Online (Sandbox Code Playgroud)
服务:
advertsPerUser() {
return this.advertsKeysPerUser()
.map(adKeys => adKeys.map(adKey => this.afDb.object('adverts/' + adKey.$key )))
.flatMap(val => Observable.combineLatest(val) );
}
Run Code Online (Sandbox Code Playgroud)
所以我的目标是在parent-component.html中执行以下操作:
<div *ngIf="adverts$">
Run Code Online (Sandbox Code Playgroud) angular ×9
rxjs ×2
typescript ×2
angularfire2 ×1
binding ×1
carrierwave ×1
events ×1
html ×1
ngfor ×1
npm ×1
observable ×1
syncfusion ×1